如何使用awk提取完全匹配的行

时间:2013-07-31 02:45:56

标签: regex awk grep match string-comparison

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

test.txt
hello10
hello100
hello1000

我尝试过以下操作并返回所有3行

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

grep -w hello10可以解决这个问题,但是在这个方面,grep版本非常有限,只有很少的交换机可用

5 个答案:

答案 0 :(得分:8)

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

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

但是你实际上并没有在我们刚添加的锚点旁边使用任何正则表达式功能,这意味着你实际上想要进行简单的旧字符串比较:

$ awk '$0=="hello10"' test.txt
hello10

答案 1 :(得分:1)

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

答案 2 :(得分:1)

您可以使用sed命令

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

此处\ b表示您要搜索的单词的边界。

答案 3 :(得分:0)

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

答案 4 :(得分:0)

gawk中还有单词边界/ y

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