Найти текстовую строку в файле и вывести только остальной текст, следующий за ней?

Поскольку вы изначально просили sedрешение, я добавляю одно:

sed '/./{H;1h;$! d}
g;/{p}$/d
s#^{p}.*#&\n{/p}#;p
s/.*/{p}/;h;d' somefile.txt

Пояснение

  • строка 1 :Добавить не -пустые строки в буфер хранения (1-я строка скопирована вместо добавления во избежание начала с новой строки ). Продолжайте для пустых строк или конца файла.
  • строка 2 :Игнорировать буферы без текста для обработки нескольких пустых строк или пустых строк в конце буфера
  • строка 3 :Если есть открывающий тег, добавьте закрывающий тег. Затем распечатайте.
  • строка 4 :Заполнить буфер хранения новым открывающим тегом.
7
06.08.2019, 17:32
3 ответа

Используйтеawk:

awk 's;/^three$/{s=1}' file

или

awk 's;$0=="three"{s=1}' file
  • s;напечатает строку, если переменная sверна, что имеет место в первый раз после того, как шаблон/слово было найдено...
  • /^three$/{s=1}установит для переменной sзначение true (1 ), если найден шаблон/слово.
10
27.01.2020, 20:14

С GNUsed:

sed 0,/three/d

Обратите внимание, что Linux — это ядро, в нем нет утилит. GNU sed— это реализация sed, обычно встречающаяся в системах GNU/Linux, таких как Debian GNU/Linux. GNU sedпредшествовал Linux и был скомпилирован для работы на большинстве Unix -подобных систем, включая большинство тех, которые используют Linux в качестве ядра. Сама по себе она является свободной, бесплатной и открытой реализацией -(с несколькими расширениями, включая этот 0адрес )утилиты UNIX sedконца 70-х годов.

9
27.01.2020, 20:14

С POSIX sed вы можете сделать как:

sed -ne '/three/!d;:a;n;p;ba' inp.file

Использование Perl:

perl -lne 'print if 1 <(/three/...eof)' inp.file
1
27.01.2020, 20:14

Теги

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