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
这将避免搜索路径中出现空格问题。
我有这个文件:
$ 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
这将避免搜索路径中出现空格问题。