Shell: 匹配保存在变量中的精确字符串

Shell: Match exact string saved in variable

我有这个文件:

$ cat file.txt
/home/user/abc   test1   15-03-25
/home/user/abc   test2   15-03-25
/home/user   test3   15-03-25
/home/user   test4   15-03-25

并且我需要将行与变量 ($pathtosearch = /home/user) 中指定的确切路径相匹配。 我尝试了基本的 awk 命令:

$ awk "$pathtosearch" file.txt
/home/user/abc   test1   15-03-25
/home/user/abc   test2   15-03-25
/home/user   test3   15-03-25
/home/user   test4   15-03-25

但它不匹配确切的字符串。

我需要这样的输出:

$ command?? file.txt
/home/user   test3   15-03-25
/home/user   test4   15-03-25

有什么想法吗?

不要将变量直接代入awk代码;它将被视为代码而不是数据,并且您将 运行 陷入元字符问题(并使自己面临代码注入漏洞)。而是使用 -v 使 awk 代码知道该变量,并对 select 行使用适当的测试:

awk -v path="$pathtosearch" ' == path' file.txt

如果数据是制表符分隔的(我有预感可能是),请明确指定字段分隔符:

awk -F '\t' -v path="$pathtosearch" ' == path' file.txt

这将避免搜索路径中出现空格问题。