ファイルに複数の文字列があることを確認するシェルスクリプト

ファイルに複数の文字列があることを確認するシェルスクリプト

ひもが3つあります。

A='apples'
B='bananas'
C='carrots'

fruit.txtこれらすべてがファイルにあることを確認したいと思います。が見つからない場合は、追加してからA追加するAように進みます。BB

これは今私が持っているものです

if grep -qF "$A | $B | $C" fruit.txt;
  then echo 'exist'
else
  echo 'does not exist'
  echo $A $B $C >> fruit.txt
fi

答え1

実行したい操作の説明には、ループの説明(「文字列がない場合は追加し、すべての文字列に対して繰り返し」)が含まれます。

ループ内の各文字列の存在を個別にテストし、その文字列がまだファイルに存在しない場合は追加できます。

fruits=( apples bananas carrots )

for fruit in "${fruits[@]}"; do
    if grep -q -wF -e "$fruit" fruit.txt; then
        printf '%s exists\n' "$fruit"
    else
        printf '%s does not exist\n' "$fruit"
        printf '%s\n' "$fruit" >>fruit.txt
    fi
done

ここでは配列を文字列として使用しています。$A$Bおよび変数を使用するには、を$C使用して設定またはfruits=( "$A" "$B" "$C" )繰り返しますfor fruit in "$A" "$B" "$C"; do ...; done

答え2

お客様の質問に厳密に答えるには:

grep -lr $1 . | xargs -I{} grep -lr $2 {}

$1これにより、ANDを含むファイルが検索されます。$2

関連情報