我有3根弦
A='apples'
B='bananas'
C='carrots'
我想看看fruit.txt
文件中是否存在所有这些内容。如果我丢失了A
,则添加A
,B
然后添加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 {}
这将找到包含$1
AND的文件$2