用于检查文件中是否存在多个字符串的 Shell 脚本

用于检查文件中是否存在多个字符串的 Shell 脚本

我有3根弦

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

我想看看fruit.txt文件中是否存在所有这些内容。如果我丢失了A,则添加AB然后添加B,依此类推。

这就是我现在拥有的

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 {}

这将找到包含$1AND的文件$2

相关内容