出力ファイルの内容をgrepしたいです。たとえばab
、cd
。
ファイルは次のようになります。
asdf
ab
hgr
cd
ab
asdsda
今私が次のようにab
1つずつgrepするならcd
for i in $@
do
grep $i file
done
わかりました。
ab
ab
cd
私が望むもの
ab
cd
ab
エレガントな解決策はありますか?
ベストアンサー1
この結果を得る理由は、ループが最初の反復で発生したすべてのケースを最初に実行して返し、次にループが最初の反復で発生したすべてのgrep ab file
ケースを実行して返すためです。ab
grep cd file
cd
file
for
ループは必要ありません。この試み:
grep -e "^ab$" -e "^cd$" file
または、-x
オプションを使用して行全体と正確に一致する一致のみを選択します(man grep
、thx〜先行は達成するのが難しい):
grep -x -e "ab" -e "cd" file
出力は次のとおりです。
ab
cd
ab
または(GNUgrep
または互換性が\|
標準BRE演算子ではないと仮定):
grep "^\(ab\|cd\)$" file
GNUと同じsed
:
sed '/^\(ab\|cd\)$/!d' file