linux - 如何在 bash 中使用 && 和 grep

标签 linux bash shell grep

我想检查文件中的多行是否存在于 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/

相关文章:

linux - Bash 是默认的,但当我运行“bash : in terminal?”时仍然会发生变化

linux - 删除从文本文件中获取的字符串值的空格或换行符

linux - 在 CentOS 上永久安全地删除文件

linux - Bash:从文件中读取时,剪切不会剪切第一行

linux - 脚本将命令输出重定向到最后一个文件名参数

bash - 如何在 bash shell 的 'AND' 命令中使用 'test' 条件

linux - SSH多台主机以检查连接性

python - virtualenv 上的 Redhat Python 2.7.6 安装

linux - 优化 grep、awk 和 sed shell 内容

shell - 如何避免 Windows 中每个 vim -S 之后的暂停