연속된 줄로 grep

연속된 줄로 grep

grep// 파일 awk에서 특정 패턴을 찾고 전체 줄을 인쇄하려면 어떻게 해야 합니까(일치하는 줄이 ?sed\

파일 foo.txt에는 다음이 포함됩니다.

something
whatever
thisXXX line \
    has a continuation line
blahblah
a \
multipleXXX \
continuation \
line

얻으려면 어떻게 해야 합니까(반드시 한 줄로 작성할 필요는 없으며 여러 공백을 제거할 필요도 없음):

thisXXX line has a continuation line
a multipleXXX continuation line

그런데 저는 bash와 fedora21을 사용하고 있으므로 POSIX와 호환될 필요는 없습니다(그러나 POSIX라면 감사하겠습니다).

답변1

\Perl을 사용하여 앞에 오는 줄 바꿈과 공백을 제거하는 또 다른 방법:

$ perl -pe 's/\\\n/ /' file | grep XXX
thisXXX line      has a continuation line
a  multipleXXX  continuation  line

추가 공백을 제거하려면 sed를 통해 전달하세요.

$ perl -pe 's/\\\n/ /' file | grep XXX | sed 's/  */ /g'
thisXXX line has a continuation line
a multipleXXX continuation line

답변2

POSIX sed 사용:

$ sed -e '
:1
/\\$/{N
  s/\n//              
  t1
}
/\\/!d 
s/\\[[:blank:]]*//g
' file

답변3

pcregrep회로 구조를 변경 하지 않고 :

pcregrep -M '^(.|\\\n)*XXX(.|\n)*?[^\\]$' file

답변4

내 트위스트:

perl -0777 -ne '                           # read the entire file into $_
    s{ [[:blank:]]* \\ \n [[:blank:]]* }   # join continued lines
     { }gx;
    print grep {/XXX/} split /(?<=\n)/     # print the matching lines
' foo.txt 
thisXXX line has a continuation line
a multipleXXX continuation line

관련 정보