【发布时间】:2015-08-20 18:43:23
【问题描述】:
通过 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
【问题讨论】:
-
正如所指出的。正则表达式匹配给定的字符串,这是我示例中的第一个字段。第一个字段被定义为第一个不是空格的字段(除非 FS 被更改)。
-
仅供参考,正则表达式没有
start of line anchor。有字符串锚点的开始和结束(^和$),由于某些工具(例如 sed 和 grep)默认一次处理一行,因此这些锚点经常被混淆为表示行的开始/结束。在这种情况下,您要求 awk 在包含在$1中的字符串的开头找到一个数字,所以它正在这样做。