还有一个空白行何时匹配字符串与awk的RF和RT?

时间:2017-04-12 15:49:30

标签: bash awk

我希望匹配以字符x开头的所有字符串。

enter image description here

为什么

echo " x  x1 x2 y1 z1  x345" |awk -v RS="x[^ ]*" '$0=RT'

再输出一行空白行

echo " x  x1 x2 y1 z1  x345" |awk -v RS="x[0-9 ]*" '$0=RT'

2 个答案:

答案 0 :(得分:1)

[^ ]捕获新行,另一个正则表达式不捕获。如果您想获得相同的结果,请使用echo -n来抑制尾随新行。

答案 1 :(得分:1)

换行符不是空白字符,因此最后一条记录为x345\n。你真正想要的表达是:

$ echo " x  x1 x2 y1 z1  x345" |awk -v RS="x[^[:space:]]*" '$0=RT'
x
x1
x2
x345

但当然你永远不应该使用$0=RT你应该简单地使用{print RT}(或者如果你觉得需要重新分配$ 0并强制字段拆分发生两次,那么{$0=RT}1'