我想检查文件中的多行是否存在于 bash 中。
为此我使用了 grep -q
,它只适用于一行:
if grep -q string1 "/path/to/file";then
echo 'exists'
else
echo 'does not exist'
fi
我尝试了很多不同的组合,例如:
if grep -q [string1] && grep -q [string2] "path/to/file";then
我也用 -E
试过:
grep -E 'pattern1' 文件名 | grep -E '模式2'
但似乎没有任何效果。有什么想法吗?
最佳答案
您可以使用此 gnu-awk
命令断言文件中存在多个字符串,而不是运行多个 grep
命令:
awk -v RS='\\Z' '/string1/ && /string2/ && /string3/{e=1} END{exit !e}' file &&
echo 'exists' || echo 'does not exist'
RS=\Z
将使 awk 读取单个记录分隔符中的所有输入- 在多个搜索词之间使用
&&
将确保所有搜索词都存在于输入文件中 - 仅当所有 3 个搜索词都存在于输入文件中时,才会打印
exists
。
关于linux - 如何在 bash 中使用 && 和 grep,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37622193/