Gnu Sed (в Gnu/Linux ), чтобы найти совпадение + "что угодно" и заменить его

Еще один канонический инструмент, который вы рассматривали awk, можно использовать со следующей строкой:

awk -F"stalled" '/stalled/{print $2}' messages

Подробное объяснение:

  • -Fопределяет разделитель для строки, т. е. «остановка». Все до разделителя адресуется с помощью $1, а все после с помощью $2.
  • /reg-ex/Ищет подходящее регулярное выражение, в данном случае "остановлено".
  • {print $<n>}-выводит n столбцов. Поскольку ваш разделитель определен как остановленный, все после остановленного считается вторым столбцом.
1
27.03.2020, 18:59
2 ответа

sed — лучший инструмент для выполнения s/old/new в отдельных строках, для всего остального просто используйте awk;

$ awk -v n=4 '/num/ && ((++c) == n){$0="num x"} {print}' file
START
num 1
num 1
num 1
num x
END
0
19.03.2021, 02:31

Ваше регулярное выражение было не совсем правильным.

$ sed ':a;N;$!ba; s/\nnum[^\n]*/\nnum x/4' file 
1
19.03.2021, 02:31

Теги

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