bash - 包含波浪号的字符串的 grep 返回不匹配的行
问题描述
我正在尝试在文件中搜索特定字符串。该字符串包含一个波浪号 - 我正在尝试隔离包含字符串“~ ca_cert”的行。
这是我的脚本:
#!/bin/bash
LIST=("~ ca_cert" "backup_window")
FILE=./test
for x in "${LIST[@]}"; do
grep $x $FILE
done
当我运行它时,它会返回包含波浪线的其他行。例如,在包含以下内容的文件中,它返回所有行,而我的意图是只返回包含 ~ ca_cert 的底行:
./test:./terraform.tfplan: ~ update in-place
./test:./terraform.tfplan: ~ resource "aws_db_instance" "rds_instance" {
./test:./terraform.tfplan: ~ ca_cert_identifier = "rds-ca-2019" -> "rds-ca-2015"
解决方案
$x
问题不在于您的grep
命令中没有引用模式。这基本上运行您的命令并找到与错误grep '~' ca_cert ./test
匹配的所有行。~
但是,您实际上并不需要在这里运行循环。只需grep -f
与进程替换一起使用:
grep -Ff <(printf '%s\n' "${LIST[@]}") ./test
./terraform.tfplan: ~ ca_cert_identifier = "rds-ca-2019" -> "rds-ca-2015"
推荐阅读
- java - SWT GC 为圆的上半部分和下半部分填充颜色
- javascript - Element UI 通过自动完成防止在表中添加重复条目
- grpc - 如何解决 grpc(java) 中的 UnusedPrivateParameter 错误?
- jquery - 检查表单提交后元素是否出现在页面上以检查用户是否已登录
- python - 是否可以对我自己的图像执行样式转换?
- arrays - 如何在 Swift 5 中对嵌套数组进行排序?
- javascript - 如何返回 JavaScript XMLHttpRequest 响应?
- r - 选择有条件的前 N 个值
- html - 在不启用视频控件的情况下双击以全屏显示 (WordPress/HTML5)
- android - 如何为所有不同的屏幕尺寸自动对齐按钮和文本视图?