8

如何使用 awk 在文件中搜索完全匹配?

test.txt
hello10
hello100
hello1000

我已经尝试了以下,它返回所有 3 行

awk '$0 ~ /^hello10/{print;}' test.txt

grep -w hello10 可以解决问题,但在这个盒子上 grep 版本非常有限,只有几个开关可用

4

5 回答 5

10

^要进行整行正则表达式匹配,您需要使用and锚定在行的开头和结尾$

$ awk '/^hello10$/' test.txt
hello10

但是除了我们刚刚添加的锚定之外,您实际上并没有使用任何正则表达式功能,这意味着您实际上想要简单的旧字符串比较:

$ awk '$0=="hello10"' test.txt
hello10
于 2013-07-31T10:07:12.943 回答
3

您可以尝试使用 \< \> 来标记诸如 \<hello10\> 之类的单词的边缘。

于 2013-07-31T02:53:30.467 回答
0

您可以使用 sed 命令

sed -n '/\bhello10\b/p' test.txt

这里 \b 表示您正在搜索的单词的边界。

于 2013-07-31T05:15:26.170 回答
0

您的正则表达式以克拉 ^ 开头,它将模式锚定在行首。尝试阅读 awk 的手册页,看看您是否也能找到一种方法来终止行尾的模式。

于 2013-07-31T03:49:27.883 回答
0

gawk中还有字边界/y

awk '{if(match("hello10", sprintf("\y%s\y",$0)) print $0}' test.txt

于 2015-01-27T13:44:34.373 回答