我有这个文件:
$ 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
有什么想法吗?
答案 0 :(得分:2)
不要将变量直接替换为awk代码;它将被视为代码而不是数据,并且您将遇到元字符问题(并打开代码注入漏洞)。而是使用-v
使awk代码知道变量,并使用适当的测试来选择行:
awk -v path="$pathtosearch" '$1 == path' file.txt
如果数据是以制表符分隔的(我可能是预感),请明确指定字段分隔符:
awk -F '\t' -v path="$pathtosearch" '$1 == path' file.txt
这将避免搜索路径中出现空格问题。