コマンドは、最後の一致文字列ではなくgrep -f input_pat.txt match_in.txt
一致パターンを印刷する方法を探しています。input_pat.txt
matched_in.txt
たとえば、次のようにinput_pat.txt
なります。
abc...blahblah
そしてmatch_in.txt
:
abcdefblahblah
"abc...blahblah"
印刷物に印刷したいです。
答え1
grepを2回呼び出すと実行できます。少し高価ですが、作業は完了です。パターンファイルがpat.txtで、検索したいファイルがdata.txtであるとしましょう。
paste <(grep -o -f pat.txt data.txt ) <(grep -f pat.txt data.txt )
両方のコマンドの両方の出力がファイルとして処理さ<( ... )
れるように、プロセス置換を使用します。paste
最初のコマンドでは、-o
オプションは一致するパターンのみを印刷します。 2番目のコマンドは、完全に一致する行を印刷します。
順序は1対1なので、2つの出力を並べて貼り付けるのは安全です(grepを実行するときにスキーマファイルやデータファイルが変更されていないと仮定)。
答え2
拡張正規表現(例grep -E
:)に切り替えることが許可されている場合は、awk
逆のアプローチを使用して次のことを実行できます。
awk '
!end_of_re_list {if (!(re[$0]++)) n++; next}
{
for (i in re)
if ($0 ~ i) {
print i
delete re[i]
if (--n == 0) exit
}
}' input_pat.txt end_of_re_list=1 match_in.txt