由于反斜杠,无法使用 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
示例如下
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