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