Обработка AWK "()" на входном потоке - PullRequest
0 голосов
/ 10 июня 2018

в следующем:

echo "private public () " | awk 'BEGIN{kw="private"}{for (i=1;i<=NF;i++)if (kw~$i) print $i}'

я получаю ошибку:

awk: run time error: regular expression compile failed (missing operand)
()

это вызвано круглыми скобками во входном потоке.Как я могу сообщить awk, что он не должен интерпретировать скобки во входном потоке?

Спасибо

Ответы [ 2 ]

0 голосов
/ 11 июня 2018

Я думаю, что я понял это правильно: если (kw ~ $ i) я хочу проверить это, термин ($ i) является членом списка ключей (kw). Спасибо за ответ:

Решением, которое я придумал, был префикс с: sed 's / [()] / \ & / g' Это выходит за скобки, так что интерпретатор регулярных выражений оставляет их в покое, поэтому у меня есть:

echo "private public ()" |sed 's / [()] / \ & / g' |awk 'BEGIN {kw = "private"} {for (i = 1; i <= NF; i ++) if (kw ~ $ i) print $ i}' </p>

Это работает, но я искалчто-то более элегантное.

0 голосов
/ 10 июня 2018

Звучит так, будто вы спрашиваете: «Как мне получить awk, чтобы не рассматривать мою строку как регулярное выражение», и ответ на этот вопрос всегда - не писать код, который использует вашу строку в качестве регулярного выражения.Просто измените ~ на ==, чтобы вместо сравнения регулярных выражений вы выполняли сравнение строк.

Если это не все, что вам нужно, отредактируйте свой вопрос, чтобы уточнить ваши требования и предоставить более по-настоящему репрезентативный пример ввода./output.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...