Como gerar um parágrafo específico com base em um padrão?

Como gerar um parágrafo específico com base em um padrão?

Tenho um arquivo de exemplo abaixo:

# 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.

Preciso gerar apenas o segundo parágrafo, começando em "#" até a última frase do parágrafo.

Como faço o grep e a saída com base no padrão? Diga se o arquivo tem mais parágrafos e eu gostaria de gerar o parágrafo que contém a palavra "TOO".

Responder1

Se os parágrafos estiverem separados por linhas vazias:

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

Um separador de registros vazio ( RS) significamodo parágrafoonde os registros são separados por sequências de linhas vazias.

Se eles estiverem #separados:

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

ou

pcregrep -Mo '#[^#]*?TOO[^#]*'
  • -Mpara multilinhagrep
  • -opara gerar apenas a parte correspondente

Responder2

perl -00ne 'print if /TOO/'
  • -00significa modo parágrafo (os registros são separados por uma ou mais linhas vazias).

informação relacionada