我有像这样的测试文件
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中
答案 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 awk
,The GNU Awk User's Guide。
由于@steve says,\d
不在Regular Expression Operators或gawk
-Specific Regexp Operators的列表中,因此您需要使用bracket expression,例如[0-9]
}或[[:digit:]]
代替您的\d
。
然而,你的问题并不清楚你的意图是什么。我已经回答了你的问题,但我怀疑我已经解决了你的根本问题。另请参阅What is the XY problem?