如何使用Sed替换字符串?

时间:2013-05-06 22:56:07

标签: sed

假设我有一个像这样的字符串

<start><a></a><a></a><a></a></start>

我想替换<start></start>内的值

<start><ab></ab><ab></ab><ab></ab><more></more><vale></value></start>

我如何使用Sed?

4 个答案:

答案 0 :(得分:1)

试试这个:

sed 's@<start>.*</start>@<start><ab></ab><ab></ab><ab></ab></start>@' file

答案 1 :(得分:0)

sed 's/(\<\/?)a\>/\1ab\>/g' yourfile,虽然这样<a></a>也会在<start>之外......

答案 2 :(得分:0)

我用 gnu sed

获得这一行
sed -r 's#(<start>)(.*)(</start>)#echo "\1"$(echo "\2"\|sed  "s:a>:ab>:g")"\3"#ge'  

参见示例:

kent$  echo "<start><a></a><a></a><a></a><foo></foo><bar></bar></start>"|sed -r 's#(<start>)(.*)(</start>)#echo "\1"$(echo "\2"\|sed  "s:a>:ab>:g")"\3"#ge'                 
<start><ab></ab><ab></ab><ab></ab><foo></foo><bar></bar></start>

注意

这将替换以<start>结尾的a之间的标记。这适用于你的例子。但如果你有<aaa></aaa>

你可以这样做:(我把它分成几行以便更好地阅读)

sed -r 's#(<start>)(.*)(</start>)
 #echo "\1"$(echo "\2"\|sed "s:<a>:<ab>:g;s:</a>:</ab>:g")"\3"
 #ge' 

e.g。

kent$  echo "<start><a></a><a></a><a></a><aaa></aaa><aba></aba></start>" \
 |sed -r 's#(<start>)(.*)(</start>)#echo "\1"$(echo "\2"\|sed  "s:<a>:<ab>:g;s:</a>:</ab>:g")"\3"#ge'
<start><ab></ab><ab></ab><ab></ab><aaa></aaa><aba></aba></start>

答案 3 :(得分:0)

grep -rl'abc'a.txt | xargs sed -i's / abc / def / g'