grep
//ファイルawk
内の特定のパターンを見つけて行全体を印刷するにはどうすればよいですか(一致する行は?sed
\
ファイルfoo.txt
には以下が含まれます。
something
whatever
thisXXX line \
has a continuation line
blahblah
a \
multipleXXX \
continuation \
line
取得するにはどうすればよいですか(必ず1行で書く必要はなく、複数のスペースを削除する必要もありません):
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