我可以在linux中的awk中的记录分隔符中使用正则表达式

时间:2013-02-07 02:18:02

标签: linux bash awk

我有像这样的测试文件

fdsf fdsf fdsfds fdsf
fdsfdsfsdf fdsfsf
fsdfsdf var12=1343243432

fdsf fdsf fdsfds fdsf
fdsfsdfdsfsdf
fsdfsdf var12=13432434432

fdsf fdsf fdsfds fdsf
fsdfsdf fdsfsf var12=13443432432

现在我想使用var12=\d+作为记录分隔符。这有可能在awk中

2 个答案:

答案 0 :(得分:7)

是的,但是您应该使用[0-9]代替\d

awk '1' RS="var12=[0-9]+" file

IIRC,只有GNU awk可以使用多字符记录分隔符。

结果:

fdsf fdsf fdsfds fdsf
fdsfdsfsdf fdsfsf
fsdfsdf 


fdsf fdsf fdsfds fdsf
fdsfsdfdsfsdf
fsdfsdf 


fdsf fdsf fdsfds fdsf
fsdfsdf fdsfsf 

如果您需要进一步的帮助,请发布您想要的输出。

答案 1 :(得分:3)

在Linux上假设GNU awk(a.k.a。gawk),是的。

  

RS

     

这是awk的输入记录分隔符。它的默认值是一个包含单个换行符的字符串,这意味着输入记录由一行文本组成。它也可以是空字符串,在这种情况下,记录由空行的运行分隔。 如果是正则表达式,则记录按输入文本中正则表达式的匹配分隔。

来源: 7.5.1 Built-in Variables That Control awkThe GNU Awk User's Guide

由于@steve says\d不在Regular Expression Operatorsgawk-Specific Regexp Operators的列表中,因此您需要使用bracket expression,例如[0-9] }或[[:digit:]]代替您的\d

然而,你的问题并不清楚你的意图是什么。我已经回答了你的问题,但我怀疑我已经解决了你的根本问题。另请参阅What is the XY problem?