都可以成功匹配,输出为何不一样?
debian8@debian:~$ echo " x x1 x2 y1 z1 x345" |awk -v RS="x1*" '$0=RT'
x
x1
x2
x345
debian8@debian:~$ echo " x x1 x2 y1 z1 x345" |awk -v RS="x[0-9]*" '$0=RT'
x
x1
x2
x345
为何echo " x x1 x2 y1 z1 x345" |awk -v RS="x1*" '$0=RT' 的输出结果多了个空行?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
发现,第一个个
x[^ ]*
分隔字串成了4行内容,而x[0-9]
把字符串分成了5行内容,差异在最后一行。个人理解:字符串末尾包含一个结束符/换行符,这里可以看成正则里表示末尾位置的
$
。原字符串末尾看成:……z1 x345$
第一个正则
x[^ ]*
把x
到$
(含)都一起匹配了,当成了一个换行符,因为$
不是空格;第二个正则
x[0-9]
不能匹配到$
符号,所以变成了x345
一个换行符,后面紧跟着一个原有的结束符$
从而行数比第一个正则表达式多一行。
打印最后一个RT的时候,
x345$
——这个RT字符串会被打印成两行,就好像这个字符串是“x345\n”
可能把我举例中所有的
$
都当成\n
更好理解,因为前置实际没有宽度(内容),只表示一个位置;而后者是有宽度(有内容,有对应的ASC码)。