Как вывести определенный абзац на основе шаблона?

Как вывести определенный абзац на основе шаблона?

Ниже приведен пример файла:

# This is a test file. This is a test file. This is a test file  
This is a test file. This is a test file. This is a test file.  
This is a test file.

# Need to output just this paragraph.Need to output just this paragraph.  
Need to output just this paragraph TOO. Need to output just this paragraph.  
Need to output just this paragraph.

Мне нужно вывести только второй абзац, начиная с «#» и до последнего предложения в абзаце.

Как мне выполнить grep и вывести данные на основе шаблона? Допустим, в файле есть еще параграфы, и я хотел бы вывести параграф, содержащий слово "TOO".

решение1

Если абзацы пустые, разделенные строками:

awk -v RS= -v ORS='\n\n' /TOO/

Пустой разделитель записей ( RS) означаетрежим абзацагде записи разделены последовательностями пустых строк.

Если они #разделены:

awk -v RS='#' '/TOO/ {print RS $0}'

или

pcregrep -Mo '#[^#]*?TOO[^#]*'
  • -Mдля многострочногоgrep
  • -oдля вывода только совпавшей части

решение2

perl -00ne 'print if /TOO/'
  • -00означает режим абзаца (записи разделяются одной или несколькими пустыми строками).

Связанный контент