[sed]记录

sed的括号本身没有特殊意义,如果要保留通配内容,需要转义。

echo "1) host" |sed  's/1) ([a-z])/$1) $1/'

有两处有问题。

1. 首先是上面说的问题,上面的意思是要匹配 1) (b)这种字符串,而且没有变量捕获的意义,所以后面的$1不是一个变量。

2.在sed中替换前面捕获的内容使用直接保存在数字变量中,而不是使用$1 $2类似的字符。故替换部分1即代表前面第一个括号中的内容。

但1本身代表1这个数字,所以需要转义。

正确写法:

echo "1) host" |sed 's/1) \([a-z]\)/\1) \1/'

posted @ 2014-07-20 09:25  silence.li  阅读(177)  评论(0编辑  收藏  举报