Только в строках с определенной строкой заменить другую строку

Сценарий оболочки, чтобы найти вхождения слова «здесь» и только в этих строках, заменить слово «это» словом «это». Остальные остальные строки печатаются так, как они были.

-1
задан 28 November 2017 в 00:19

2 ответа

Решение awk (т.е. GNU Awk в Ubuntu) может выглядеть так:

awk '{ if ( /\yhere\y/ ) gsub ( /\ythis\y/ , "that" ); print }'

\y в awk равно \b в sed, значение которого здесь @ByteCommander уже объяснил. Сравните этот пример:

$ awk '{if(/here/)gsub(/\ythis\y/,"that");print}' <<EOL > here is this > here is athis > there is this > EOL here is that here is athis there is that $ awk '{if(/\yhere\y/)gsub(/\ythis\y/,"that");print}' <<EOL > here is this > here is athis > there is this > EOL here is that here is athis there is this

Пояснения

if ( conditional expression ) action - оператор awk if: если текущая обработанная строка содержит условное выражение, тогда выполните действие /\yhere\y/ - регулярное выражение, соответствующее слову «здесь» gsub(x,y) - g lobally (= несколько раз на строку, если необходимо) sub создать x на y print - распечатать текущую обрабатываемую строку
1
ответ дан 18 July 2018 в 02:29

Решение awk (т.е. GNU Awk в Ubuntu) может выглядеть так:

awk '{ if ( /\yhere\y/ ) gsub ( /\ythis\y/ , "that" ); print }'

\y в awk равно \b в sed, значение которого здесь @ByteCommander уже объяснил. Сравните этот пример:

$ awk '{if(/here/)gsub(/\ythis\y/,"that");print}' <<EOL > here is this > here is athis > there is this > EOL here is that here is athis there is that $ awk '{if(/\yhere\y/)gsub(/\ythis\y/,"that");print}' <<EOL > here is this > here is athis > there is this > EOL here is that here is athis there is this

Пояснения

if ( conditional expression ) action - оператор awk if: если текущая обработанная строка содержит условное выражение, тогда выполните действие /\yhere\y/ - регулярное выражение, соответствующее слову «здесь» gsub(x,y) - g lobally (= несколько раз на строку, если необходимо) sub создать x на y print - распечатать текущую обрабатываемую строку
6
ответ дан 24 July 2018 в 17:34

Другие вопросы по тегам:

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