由于反斜杠,无法使用 grep 匹配变量

Unable to match a variable using grep because of back slash

我有一个变量,其值设置为 AMB529\SPB_REPORTING,当我试图找到与其值匹配的值时,由于反斜杠,它不起作用。双引号和单引号都试过了,但没有成功。

示例如下

var=AMB529\SPB_REPORTING 猫 text.txt | grep "$var"

它将 $var 的值取为 AMB529SPB_REPORTING,因此模式匹配不起作用。

在此先感谢您的帮助。

grep命令可用于显示文件中的行:cat在这里没用。

少了一个;,为了在当前shell中定义var变量(不在cat命令的执行环境中)

包含 \ 后跟任何普通字符的正则表达式将被使用,就好像 \ 字符不存在一样(参见 man 7 regex)。

@Socowi 是对的,分配给 var 的值似乎是文件名(普通字符串)而不是 REGEX。

此外2'(引号)应该在给var赋值时使用,以抑制pathname expansion

试试这个:

var='AMB529\SPB_REPORTING' ; grep -F "${var}" text.txt

使用 bash 内置命令 read 有相同的行为(参见 read --help):当 \ 后跟一个普通字符时,它会被删除。

-r   do not allow backslashes to escape any characters

试试这个:

while IFS= read -r line ; do
   grep -F "${line}" text.txt
   # etc.
done