我有这样的测试文件
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-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
如果您需要进一步帮助,请发布您想要的输出。
假设 Linux 上有 GNU awk(又名
gawk
),是的。
RS
这是awk的输入记录分隔符。它的默认值是包含单个换行符的字符串,这意味着输入记录由单行文本组成。它也可以是空字符串,在这种情况下,记录由空行分隔。 如果是正则表达式,则记录由输入文本中正则表达式的匹配项分隔。
来源: 7.5.1 控制的内置变量
awk
,GNU Awk 用户指南。
正如@steve所说,
\d
不在正则表达式运算符或gawk
-特定正则表达式运算符列表中,因此您需要使用括号表达式,例如[0-9]
或 [[:digit:]]
代替您的 \d
。
但是,从你的问题中并不清楚你的意图是什么。我已经回答了你的问题,但我怀疑我是否已经解决了你的根本问题。另请参阅什么是 XY 问题?
11 年过去了,POSIX 2024 awk 规范仍然规定 RS 仅使用一个字符(或者对于多行记录则不使用)。 “如果 RS 包含多个字符,则结果未指定。”但现在几乎所有 awk 实现都接受 RS 的正则表达式,包括 gawk、mawk、goawk、busybox awk、toybox awk 和 Kernighan 的 One True Awk(又名 nawk)。