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/'