Поиск и замена следующих n слов в vi [дубликат]

Вы можете использовать awk для этого, я думаю, так:

awk -vN=3 '/PATTERN/ {skips[FNR+N]=1;} {if(!(FNR in skips)) print;}' <file>

поэтому каждый раз, когда мы нажимаем ШАБЛОН , мы записываем строку, которая равна N отсюда, и вывести только те строки, которые мы не отметили для пропуска.

с gawk вы также можете использовать -i inplace , чтобы сделать это на месте

Как вы заметили, это не будет обрабатывать несколько файлов. Конечно, вы можете обернуть цикл for для перебора всех файлов, но если этого недостаточно, чтобы сделать командную строку слишком длинной, вы также можете сделать это так:

 awk -vN=3 '{if(FNR==1) split("", skips, ":");} /PATTERN/ {skips[FNR+N]=1;} {if(!(FNR in skips)) print;}' *

где мы сбрасываем пропускает к пустому массиву каждый раз, когда FNR достигает 1, то есть начало каждого файла.
С gnu awk вы можете написать это как:

gawk -i inplace 'FNR==1{delete nr};/PATTERN/{nr[FNR+3]++};!(FNR in nr)' file*
5
13.04.2017, 15:36
0 ответов

Теги

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