6

我有这样的测试文件

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 中是否可能

4

2 回答 2

8

是的,但是您应该使用[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 

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

于 2013-02-07T02:22:40.267 回答
4

假设Linux 上的GNU awk (aka gawk),是的。

RS

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

来源: 7.5.1 控制的内置变量awkGNU Awk 用户指南

正如@steve 所说\d不在正则表达式运算符或-特定正则表达式运算gawk列表中,因此您需要使用括号表达式,例如[0-9][[:digit:]]代替您的\d.

但是,您的问题尚不清楚您的意图是什么。我已经回答了你的问题,但我怀疑我已经解决了你的根本问题。另请参阅什么是 XY 问题?

于 2013-02-07T02:21:10.137 回答