
我有两个逗号分隔的文件
我将从文件 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
\r
accts.csv
您看不到 中的空格echo $pattern
,因为该变量没有被引用(就像在调用 grep 中一样),因此它被 IFS 机制很好地分割和修剪。尝试类似的东西echo "{$pattern}"
。
你应该自己修剪:
$ pattern=$(sed 's/[ \r]//g;q' accts.csv)