grep 因变量而失败,但如果变量被拼写出来则有效

grep 因变量而失败,但如果变量被拼写出来则有效

我有两个逗号分隔的文件

我将从文件 1 中读取 1 行,

我需要在 file2 中找到匹配的行,包括中间的逗号

如果我通过键入该行(即用鼠标复制粘贴)字面意思来做到这一点,我就会得到我需要的东西

如果我将该行分配给一个变量,我什么也得不到

我很困惑。我知道就正则表达式匹配而言我做错了什么,但是什么呢?

这是一个例子:

$ pattern=$(head -1 accts.csv)
$ echo $pattern
_ccc_net_pfx,_ccc_net_pfx_export
$ grep "$pattern" all.csv
$ grep "_ccc_net_pfx,_ccc_net_pfx_export" all.csv
MyDomain\user1,User-1,Administrator,_ccc_net_pfx,_ccc_net_pfx_export,owner,Application,,
MyDomain\user2,User-2,User,_ccc_net_pfx,_ccc_net_pfx_export,readonly,Application,,

答案1

你的$pattern变量包含空格——或者如果来自 Windows 机器,则可能在末尾包含一个虚假的^M// 。CR\raccts.csv

您看不到 中的空格echo $pattern,因为该变量没有被引用(就像在调用 grep 中一样),因此它被 IFS 机制很好地分割和修剪。尝试类似的东西echo "{$pattern}"

你应该自己修剪:

$ pattern=$(sed 's/[ \r]//g;q' accts.csv)

相关内容