Pattern.txtというファイルに単語のリストがあります。リスト内のすべての単語を含む入力ストリームの段落を検索する必要があります。段落の単一の単語(foo)には通常、sedコードを使用します。
sed '/./{H;$!d;}; x;/foo/!d'
しかし、単語リストでこれを行う方法がわかりません。
ベストアンサー1
GNU awkを使う:
$ cat patterns.txt
foo
bar
baz
$ cat file
first paragraph foo bar
second baz bar foo
third
fourth foo baz bar
fifth baz foo
これはcat file
入力ストリームを表します。
$ cat file | gawk '
NR == FNR {pattern[++n] = $0; next}
ENDFILE {RS = ""; ORS = "\n\n"}
{for (i = 1; i <= n; i++) if ($0 !~ pattern[i]) next; print}
' patterns.txt - # note the trailing hyphen
second baz bar foo
fourth foo baz bar
RS = ""
空白行で区切られた段落をレコードに読み込むには、awkを変更します。