首页 > 解决方案 > 包含波浪号的字符串的 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"

标签: bashgrep

解决方案


$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" 

推荐阅读