如何使用 awk 在文件中搜索完全匹配?
test.txt
hello10
hello100
hello1000
我已经尝试了以下,它返回所有 3 行
awk '$0 ~ /^hello10/{print;}' test.txt
grep -w hello10 可以解决问题,但在这个盒子上 grep 版本非常有限,只有几个开关可用
如何使用 awk 在文件中搜索完全匹配?
test.txt
hello10
hello100
hello1000
我已经尝试了以下,它返回所有 3 行
awk '$0 ~ /^hello10/{print;}' test.txt
grep -w hello10 可以解决问题,但在这个盒子上 grep 版本非常有限,只有几个开关可用
^
要进行整行正则表达式匹配,您需要使用and锚定在行的开头和结尾$
:
$ awk '/^hello10$/' test.txt
hello10
但是除了我们刚刚添加的锚定之外,您实际上并没有使用任何正则表达式功能,这意味着您实际上想要简单的旧字符串比较:
$ awk '$0=="hello10"' test.txt
hello10
您可以尝试使用 \< \> 来标记诸如 \<hello10\> 之类的单词的边缘。
您可以使用 sed 命令
sed -n '/\bhello10\b/p' test.txt
这里 \b 表示您正在搜索的单词的边界。
您的正则表达式以克拉 ^ 开头,它将模式锚定在行首。尝试阅读 awk 的手册页,看看您是否也能找到一种方法来终止行尾的模式。
gawk中还有字边界/y
awk '{if(match("hello10", sprintf("\y%s\y",$0)) print $0}' test.txt