2016-01-08 2 views
0

The prototype of the function gensub() in GAWK являетсяКаков тип аргумента «замена» в gensub() GAWK?

gensub(regexp, replacement, how [, target]) 
  1. По моим наблюдениям из примеров,

    • regexp является регулярное выражение, заключенное в слеши
    • Я видел в примерах строка в кавычках предоставляется replacement (см. пример ниже).

      Но он может содержать обратные ссылки на группы в совпадающей подстроке (смотрите пример ниже), который, кажется, мне, что тип replacement является регулярным выражением, и что строка в кавычках предоставляются replacement принуждается в регулярное выражение.

      Теперь я confused: что такое replacement, строка или обычное выражение ?

  2. Могу ли я дать регулярное выражение, заключенное в слеши к replacement?

    Е.Г., из той же ссылке:

    $ gawk ' 
    > BEGIN { 
    >  a = "abc def" 
    >  b = gensub(/(.+) (.+)/, "\\2 \\1", "g", a) 
    >  print b 
    > }' 
    -| def abc 
    

    Могу ли я заменить b = gensub(/(.+) (.+)/, "\\2 \\1", "g", a) с b = gensub(/(.+) (.+)/, /\2 \1/, "g", a)?

    Btw, что же -| def abc означает?

ответ

1

В первую очередь замена представляет собой строку с ограниченным набором метасимволов.

Если вы используете регулярное выражение для замены, то оно может быть принято; Мне бы очень хотелось разобраться, что он делает.

-| def abc - это в основном только результат предыдущей (иллюстративной) команды. Роль -| объясняется в typographical conventions в качестве вывода метки глифа для стандартного вывода; большинство других выходных данных этого маркера перед выходом. Во всяком случае, это не входит в команду awk. Команда awk будет генерировать def abc.

Какие символы обрабатываются специально?

Руководство говорит (в gensub()):

Это делается с помощью скобок в регулярном выражении для обозначения компонентов, а затем указать «\ N» в тексте замены, где N является цифрой от 1 до 9.

Он также упоминает о 'более sub и gsub обеспечивают), так глядя на gsub(), он говорит:

Как и в sub(), символы' & 'и '\' специальные

и sub() говорит:

Если на смену появляется специальный символ '&', он обозначает точную подстроку, которая соответствовала регулярному выражению. ... Эффект этого специального символа ('&') можно отключить, поместив в него обратную косую черту. Как обычно, чтобы вставить одну обратную косую черту в строку, вы должны написать две обратные косые черты. Поэтому напишите '\ &' в строковой константе, чтобы включить в регистр буква «&».

+0

Спасибо. «замена - это строка с ограниченным набором метасимволов». Обратные ссылки на захваченные группы могут отображаться в 'replacement', но' replacement' указан как строка с кавычками. Является ли тип «замены» строкой, регулярным выражением или чем-то еще? – Tim

+0

Это строка, как я уже говорил. Несколько символов в строке обрабатываются специально, но в остальном это строка. –

+0

какие персонажи обрабатываются специально? – Tim

Смежные вопросы