文字列を含むが同じ行に別の文字列を含まないファイルから行を抽出します。

文字列を含むが同じ行に別の文字列を含まないファイルから行を抽出します。

特定の文字列を含むファイルのファイル名のリストを取得するためにスクリプトで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シェルループを繰り返すよりも速くなる可能性があります。

関連情報