シェルスクリプトから変数値を取得するためにgrepする方法は?

シェルスクリプトから変数値を取得するためにgrepする方法は?

2つのファイルがあります。

  • 私が探したい値がいっぱいのファイル
  • マイソーステキストファイル

私は値のリストを繰り返し、ソースファイルに対してgrepを実行するショートシェルコマンドを書いた。ファイルに値が見つからない場合は、値を印刷したいと思います。

問題は、すべての値を印刷するため、値を正しくgrepしないため、常に一致せずに値を印刷することです。誰かが私が間違っていることを教えてくれることを願っています。よろしくお願いします。

これは私のスクリプトです。

for i in `cat uniq_val.out`
do
   found=`grep "$i" fd.out`
   if [ -z "${found}" ]
   then
      echo $i
   fi
done

たとえば、私のuniq_val.outに次のものが含まれているとします。

abc123
def456
ghi789
jkl101112
mno131415

私のfd.outには次の内容が含まれています。

abc123
def456
mno131415

私のシェルスクリプトを返したい

ghi789
jkl101112

ベストアンサー1

次のようなさまざまなアプローチをお勧めします。

grep -f <(grep -o -f uniq_val.out fd.out) -v uniq_val.out

つまり、内部的にはパターンファイルgrepとして機能し、一致する部分のみを返します。外部的には、grepはリスト内のこれらの値の逆数を実行します。uniq_val.outgrep

しかし、私が知っている限り、-oこれはPOSIXではありません。


編集する次の問題があるサンプルファイル:

両方のファイルが実際に一致のみが必要な1行の文字列である場合は、パターンファイルのロジックを逆に置き換え、完全行-x一致を使用します。

grep -vx -f fd.out uniq_val.out

これはPOSIXと互換性があります。

おすすめ記事