Печатать выше строки и ниже четырех строк, если шаблон соответствует

Я протестировал приведенную ниже команду sed, и у меня все сработало

 sed "s/particulier\..*<a/particulier.<a/g" file

выход

...Something before
<description><![CDATA[Des  chercheurs de l&#x27;université de Columbia à New York ont mis au point un nouveau moyen de cacher un message dans un texte sans en altérer le sens et sans dépendre d&#x27;un format de fichier particulier.<a href="https://korben.info/cacher-des-informations-dans-un-texte-grace-a-des-modifications-sur-les-caracteres.html">Passage a la news suivante</a>]]></description>
... Other news
0
11.02.2020, 13:18
1 ответ

Сawk:

awk '/error/ {n = 6}
           n {print prev; n--}
             {prev = $0}
         END {if (n) print}
    ' < your-file

Или добавить пустую строку между этими группами из 6 (при условии отсутствия перекрывающихся )строк:

awk '/error/ {n = 6; if (x++) print ""}
           n {print prev; n--}
             {prev = $0}
         END {if (n) print}
    ' < your-file

Обязательно используйте /usr/xpg4/bin/awk, nawkили /usr/gnu/bin/awkв Solaris. Тот, что в /bin, устарел из 70-х и не поддерживает современный стандартный синтаксис.

Если у вас есть /usr/gnu/bin/awkхотя(text/gawkпакет ), скорее всего, у вас есть /usr/gnu/bin/grepа также(text/gnu-grepпакет )и вы можете использовать его -A/ -Bрасширения:

/usr/gnu/bin/grep -B1 -A4 error < your-file

(GNU grepразделяет не-перекрывающиеся группы --строками ).

4
28.04.2021, 23:23

Теги

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