Como produzir um parágrafo específico baseado em um padrão? [duplicado]

0

Eu tenho um arquivo de amostra 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.

Eu preciso mostrar apenas o segundo parágrafo, começando de "#" até a última frase do parágrafo.

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

    
por Johan Hakim Fahmi 23.09.2016 / 09:35

2 respostas

2

Se os parágrafos estiverem separados por linhas vazias:

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

Um separador de registro vazio ( RS ) significa modo de parágrafo onde os registros são separados por sequências de linhas vazias.

Se eles forem # separados:

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

ou

pcregrep -Mo '#[^#]*?TOO[^#]*'
  • -M para multilinha grep
  • -o para produzir apenas a parte correspondida
por 23.09.2016 / 10:21
0
perl -00ne 'print if /TOO/'
  • -00 significa o modo de parágrafo (os registros são separados por uma ou mais linhas vazias).
por 23.09.2016 / 10:29