Почему это регулярное выражение не работает в awk?

Вы можете использовать virtual_alias_maps [*]:

virtual_alias_maps = regexp:/etc/postfix/aliases

и заполнить /etc/postfix/aliases

/t(.*)@mydomain.com/ support@mydomain.com

Вы, конечно, можете точно настроить regex для точного соответствия вашему коду ticketid (т.е. только цифры и т.д.) или использовать обратные ссылки.

[*] если вы не используете виртуальные домены в postfix, вы также можете использовать alias_maps, но как это работает, иногда может быть непонятно, читайте https://serverfault.com/questions/644306/confused-about-alias-maps-and-virtual-alias-maps об этом

1
17.03.2019, 00:51
1 ответ

awkподдерживает расширенные регулярные выражения POSIX(ERE ). Вы пытаетесь использовать Perl -совместимое регулярное выражение (PCRE ). В ERE нет(?<=...)(«заглянуть -за утверждение» ).

Чтобы получить дату кодирования из ввода, рассмотрим

awk -F ':' '$1 ~ /^Encode Date/ { sub("^ ", "", $2); print $2 }' file

При этом каждая строка рассматривается как:-поля с разделителями. Он выбирает строку, первое такое поле которой начинается со строки Encode Date, и удаляет пробел в начале второго поля этой строки перед его печатью.

С sedон был бы немного короче:

sed -n '/^Encode Date/s/.*: //p' file

Это находит правильную строку, затем удаляет все до и включая :и следующий за ним пробел, и выводит измененную строку.

Или, с эквивалентной sedоперацией, которая пытается изменить каждую строку и печатает те, которые были успешно изменены,

sed -n 's/^Encode Date.*: //p' file

Если вы хотите напечатать всю строку (, как ваша последняя команда, кажется, хочет сделать ), тогда используйте

awk '/^Encode Date/' file

или,

sed -n '/^Encode Date/p' file

или,

grep '^Encode Date' file

Связанные:

4
27.01.2020, 23:22

Теги

Похожие вопросы