Руководство пользователя для GNU Awk
4. Регулярные выражения
4.2 Управляющие последовательности
Некоторые символы не могут быть включены прямо в строковые константы ("foo") или константы regexp (/foo/). Вместо этого они представляются с помощью управляющих последовательностей, которые являются символьными последовательностями, начинающимися с обратного слеш (`"'). Одно из назначений управляющих последовательностей --- включать знак двойной кавычки в строковую константу. Поскольку просто двойная кавычка оканчивает цепочку, нужно употреблять `""' для представления символа двойной кавычки как члена цепочки.
Например:
$ awk 'BEGIN - print "He said ""hi!"" to her." ""'
a He said "hi!" to her.
Обратный слеш есть другой символ, который не может быть включен нормально; нужно писать `""', чтобы включить обратный слеш в цепочку или regexp. Так, цепочка, состоящая из двух символов `"' и `"', должна быть написана как """""".
Другая роль обратного слеш состоит в представлении непечатных символов, таких как tab или newline. Хотя ничего не препятствует вам вставлять большинство непечатных символов в строковую константу или константу regexp, они могут выглядеть странно.
Приведем здесь таблицу всех управляющих последовательностей, используемых в awk, и того, что они представляют. Если не указано другое, все эти управляющие последовательности применяются в строковых и в regexp константах.
"" обратный слеш, `"'.
"a Символ "внимание", Control-g, ASCII code 7 (BEL).
"b Backspace, Control-h, ASCII code 8 (BS).
"f Formfeed, Control-l, ASCII code 12 (FF).
"n Newline, Control-j, ASCII code 10 (LF).
"r Carriage return, Control-m, ASCII code 13 (CR).
"t Horizontal tab, Control-i, ASCII code 9 (HT).
"v Vertical tab, Control-k, ASCII code 11 (VT).
"nnn Восьмеричное значение nnn,
где nnn есть одна-три цифры между `0' и `7'.
Например, код для ASCII ESC (escape) символа есть `"033'.
"xhh... Шестнадцатеричное значение hh,
где hh есть шестнадцатеричные цифры
(от `0' до `9' и от `A' до `F' или от `a' до `f').
Подобно аналогичным конструкциям в ANSI C, управляющие последовательности продолжаются, пока не достигается первый не-шестнадцатеричный символ. Однако, употребление больше чем двух шестнадцатеричных цифр приводит к неопределенному результату. ( `"x' управляющая последовательность недопустима в POSIX awk.)
"/ Слеш (необходим только в константах regexp). Используется, если вы хотите написать regexp-константу, содержащую слеш. Поскольку regexp ограничивается слешем, вы должны отметить слеш как часть образца, чтобы побудить awk продолжать обработку regexp.
"" Двойная кавычка (необходима только для строковых констант). В gawk имеются еще две символьные последовательности, которые начинаются с обратного слеш и имеют специальное значение в regexp. См. раздел 4.4 [Дополнительные операторы в Regexp, только для gawk], стр. 31.
Что произойдет, если вы поместите в строчной константе обратный слеш перед тем, что не является одним из символов, перечисленных выше? В POSIX awk это не определено намеренно. Имеются две возможности:
1. Вычеркнуть обратный слеш. Это делают оба Unix awk и gawk. Например, "a"qc" то же самое что "aqc".
2. Оставить обратный слеш в одиночестве. Некоторые другие реализации awk делают это. В такой реализации "a"qc" есть то же самое как напечатать "a""qc".
В regexp обратный слеш перед любым символом, который отсутствует в предыдущей таблице и не указан в разделе 4.4 [Дополнительные Regexp операторы, только для gawk], стр. 31, означает, что следующий символ должен быть воспринят буквально, даже если это есть орератор regexp.
Например,
/a"+b/ соответствует трем символам
`a+b'.
Для полной переносимости не употребляйте обратный слеш перед символами, не перечисленными в таблице, приведенной выше.
Возникает еще один интересный вопрос. Предположим, вы используете восьмеричную или шестнадцатеричную управляющие последовательности для представления некоторого метасимвола в regexp (см. раздел 4.3 [Операторы в регулярных выражениях], стр. 26). Должен ли awk рассматривать этот символ буквально или как оператор в в regexp? Оказывается, что исторически такие символы рассматривались буквально (d.c.). Однако, стандарт POSIX указывает, что они должны рассматриваться как настоящие метасимволы, и gawk как раз это и делает. Вместе с тем в режиме эмуляции (см. раздел 14.1 [Параметры командной строки], стр. 161), gawk трактует символы, представленные восьмеричными или шестнадцатеричными управляющими последовательностями буквально, если они употреблены в константах regexp.
Так, /a"52b/ эквивалентно /a"*b/.
Подведем итоги:
1. Управляющие последовательности из приведенной таблицы всегда обрабатываются в первую очередь в строковых константах и константах regexp. Это происходит на ранней стадии, когда awk читает вашу программу.
2. gawk обрабатывает константы regexp и динамические regexp (см.раздел 4.7 [Использование динамических regexp], стр. 35) для специальных операторов, перечисленных в разделе 4.4 [Дополнительные операторы Regexp, только в gawk], стр. 31.
3. Обратный слеш перед любым другим символом означает, что этот символ должен трактоваться буквально.
Назад | Вперед
Содержание (общее) | Содержание раздела
Если Вы не нашли что искали, то рекомендую воспользоваться поиском по сайту:
|