awk正则表达式开始行锚定匹配空格

时间:2015-06-05 17:55:44

标签: regex bash awk

通过awk解析输入文件我遇到了awk中锚点的问题。

给出以下文件:

 2015
2015
test
 test

使用awk输出

$ awk '$1 ~ /^[0-9]/' file
 2015
2015

使用sed输出

$ sed -n '/^[0-9]/p' file
2015

有人可以解释我在awk中看到的行为吗?

  • CentOS 7,GNU bash 4.2.46,GNU Awk 4.0.2
  • AIX 7,GNU bash 4.3.30,awk(AIX中的默认版本)和gawk 4.0.2

2 个答案:

答案 0 :(得分:5)

您将了解与此awk命令的区别:

awk '/^[0-9]/' file
2015

现在awk正在全线运行,就像sed而不仅仅是第一个字段。

$1 ~ /^[0-9]/仅比较第一个字段,因为空格是awk中的默认字段分隔符,因此第一个字段在两行中都是2015,而不管它之前的空格。

答案 1 :(得分:4)

问题是你正在挑选第一个字段。

你应该做awk '/^[0-9]/' file与整行匹配。

更确切地说:

awk '$0 ~ /^[0-9]/' file

是你想要的,因为$0就是整行。