我使用 ack 工具(类似 grep 但更强大)来匹配文件中的字符串
请看以下 ack 示例
./ack -a 127.0.0.1 /var/ntp/ntpstats/file
55305 57262.736 10.106.190.191 9624 0.000460 0.00127 0.00168
我只想在 /var/ntp/ntpstats/file 中搜索 IP 127.0.0.1
但确认返回该行:
55305 57262.736 10.106.190.191 9624 0.000460 0.00127 0.00168
因此看起来 ack 与 127.0.0.1 匹配,但实际上该行没有地址 127.0.0.1
有人可以给我建议如何使用 ack 工具进行精确匹配吗?(也许 ack 之后缺少一些标志?)
谢谢
答案1
是.
Perl 中的元字符。它的意思是“匹配任何字符”。您有三个选择。
ack '127\.0\.0\.1'
这引用了每个时期,使每个时期都成为实际的时期。ack '\Q127.0.0.1'
在 Perl 正则表达式中,\Q
表示“引用 \Q 之后的所有元字符”ack -Q 127.0.0.1
由于\Q
非常常见,因此 ack 有一个-Q
开关,表示相同的意思。
另外,我看到你使用了-a
开关,大概是为了确保匹配没有扩展名的文件。如果你指定要搜索的文件,则不需要这样做。
答案2
正则表达式中的A.
匹配除换行符之外的任何单个字符。如果要匹配文字句点,则需要对其进行转义。
./ack -a '127\.0\.0\.1' /var/ntp/ntpstats/file
答案3
仅详细说明一下 Ignacio 的回答:
55305 57262.736 10.106.190.191 9624 0.000460 0.00127 0.00168
^^^^^^^^^
如您所见,使用通配符 (.),该行的上述部分符合您的搜索条件。