LINUX.ORG.RU

awk. Как сделать, чтобы возвращал false? И вопросы по sed

 ,


0

0

Как сделать, чтобы awk возвращал false?

Вот, например,

awk '$2 == "aa" {print; exit}' /file

Мне нужно чтобы он выводил первое совпадение и завершался, а в случае, если ничего не найдено, завершался с ошибкой. Как -m1 у grep.
Пробовал втыкать разные else и false, но без знания синтаксиса не получается.
Ещё одна проблема, что он выводит пустые строки, когда ничего не нашёл, если перенаправлять его вывод в переменную. Как этого избежать?

Заодно спрошу по sed. У него ущербный man.
Как сделать, чтобы обрабатывал только первое встретившееся совпадение? Опять же аналог ключа -m1 у grep.
Чтобы работало для всяких там 's///'. Знаю, что, вроде бы, нужно добавить какие-то символы и '1' перед 's'.
А как пользоваться командой 'p'? Наподобие '/rrrr/d', только не 'd', а 'p', но оно почему-то не работает.

★★★★★

Последнее исправление: teod0r (всего исправлений: 3)

awk 'BEGIN {err=1}; $2 == "aa" {print; err=0; exit}; END {exit(err)}' /file

all the END rules are merged, and executed when all the input is exhausted (or when an exit statement is executed)

futurama ★★★★★
()
Последнее исправление: futurama (всего исправлений: 1)

Заодно спрошу по sed. У него ущербный man.

Ну, где-то так...
info sed, sed(1p),
http://sed.sf.net - кроме того, что там есть на месте, можешь погуглить книжки, может и есть что-либо в переводе и/или условно-свободном доступе, ну и по ссылкам «lovers» походить.

ABW ★★★★★
()

sed ‘s/from/to/’ и так вроде обрабатывает только одно совпадение, в отличие от ‘s/from/to/g’

anonymous
()
Ответ на: комментарий от anonymous

Поправка самому себе: без модификатора g sed действительно обрабатывает только одно совпадение В КАЖДОЙ СТРОКЕ. Следовательно, чтобы обрабатывалось только одно совпадение во всём файле, нужно чтобы весь файл был одной строкой. Это можно сделать, например, запустив sed с флагом -z (использовать в качестве переноса строк символ с кодом 0): sed ‘s/from/to/’ -z

anonymous
()

но оно почему-то не работает

Оно работает - пишет тебе в потоке еще раз строку с совпадением. Если тебе нужна только эта строка - используй -n

YAR ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.