为什么SED在替换模式后删除第一个字符

时间:2014-11-06 16:30:53

标签: bash sed

我想知道出了什么问题:

b="inst.;inst" ; echo $b | sed -e 's/\.;[^ ]/\n /' inst nst

预期输出

inst
inst

提前感谢任何线索。

3 个答案:

答案 0 :(得分:4)

您的模式匹配三个字符。一个句号,一个分号和一些非空格字符。然后用两个字符(换行符和空格)替换所有这三个字符。

因此,您的模式与.;i匹配,并将其替换为\n

您需要捕获并重新插入该非空格字符。

在模式中使用\([^ ]\),并使用\n \1替换。

答案 1 :(得分:2)

您正在替换inst的第一个字符,捕获并保留它,即

sed -e 's/\.;\([^ ]\)/\n \1/'

答案 2 :(得分:0)

或者只是将命令改为b =“inst .; inst”; echo $ b | sed -e's / .; / \ n /' 替换。;换行