特定の文字列を含むファイルのファイル名のリストを取得するためにスクリプトでgrepを使用しています。デフォルトのコマンドは、doループの次のコマンドです。
if grep -q "$str" Inputs/inp$n; then
echo inp$n >> file_list.txt
fi
次のように確認のために行自体を取得します。
grep "$str" Files/inp$n >> lines.txt
私が望むのは、特定の文字列を見つけるときに出力で一部の誤検出を防ぐことです。 「#」は数字(複数の数字にすることができます)である「abc#」を含む行を取得しようとしますが、文字列「abc」を検索するときに特定の単語「abcde」を表示したくありません。 "abc#"と "abcde"は、このファイルの同じ行には表示されません。
「abc」を含む行で「abcde」を含む行を無視するようにgrepに指示する方法はありますか?
答え1
$ grep -l 'abc[0-9]' Inputs/inp*
スイッチは-l
一致するファイルをリストします。繰り返すのではなく、検索するファイルセットを提供する方がfor
シェルループを繰り返すよりも速くなる可能性があります。