Реализация busybox awk
— единственная известная мне реализация, которая поддерживает обратные ссылки -. Он также поддерживает расширения gawk
gensub()
и \w
:
.
Как и в случае с sub()
и gsub()
, вы должны использовать "..."
вместо /.../
и использовать \\1
вместо\1
(в стандарте awk
, "\1"
— это символ со значением 1.(^A
)и /\1/
необходимы для соответствия этому символу, в то время как "\\1"
равно (хорошо было)un (der ), указанным в POSIX; также обратите внимание, что POSIX ERE не имеют обратных -ссылок, это единственная функция, которую имеют BRE, но не ERE ).
$ echo ab aa cc de mn | busybox awk '{print gensub("(\\w)\\1", "\\1\\1\\1", "g")}'
ab aaa ccc de mn
Остерегайтесь, хотя этот busybox awk
не является интернационализированным , его \w
соответствует только a-zA-Z0-9_
независимо от локали (то же самое для [[:alnum:]]
), а многобайтовые символы -не являются поддерживается:
$ echo ee éé | busybox awk '{print gensub("(\\w)\\1", "\\1\\1\\1", "g")}'
eee éé
Со стандартными утилитами для этой работы обычно используется sed
:
sed 's/\([[:alnum:]_]\)\1/&\1/g'
sed
регулярные выражения — это основные регулярные выражения, которые поддерживают обратные ссылки. Некоторые реализации sed
поддерживают расширенные регулярные выражения с -r
или -E
, и POSIX будет указывать -E
в следующей основной версии стандарта, но по-прежнему не будет обратных ссылок (через группы захвата. на замену s
будет ). GNU и busybox sed
поддерживают обратные -ссылки с -E
, а FreeBSD sed
— нет.