1

使用 awk 我想使用正则表达式匹配整个记录。默认情况下,正则表达式匹配是针对记录的一部分。

理想的解决方案是:

  • 无论使用何种字段分隔符,对所有字段都是通用的。
  • 不要将整个输入视为单个字段并使用字符串函数手动解析它。
  • 例如,以一般方式工作,而不是特定于 gawk。

然而,任何和所有的解决方案都是有意义的,只要它们使用 Awk 而不调用外部程序

一个例子,我有:

$ ls
indata.txt  t1.awk
$ cat indata.txt 
a1010_
1010_
1010_b
$ cat t1.awk 
/[01]*_[01]*/ { print $0 }

我得到:

$ awk -f t1.awk indata.txt
a1010_
1010_
1010_b

这是我正在寻找的结果:

$ awk -f t1.awk indata.txt
1010_
4

2 回答 2

4

您只需要在您的正则表达式中添加一个开始和结束锚点:

/^[01]*_[01]*$/ { print $0 }
于 2008-12-06T04:21:52.003 回答
2
$ gawk '/^[01]*_[01]*$/' indata.txt
1010_
于 2008-12-06T04:23:06.633 回答