0

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

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

我想像这样替换里面的<start></start>

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

我如何使用 Sed 做到这一点?

4

4 回答 4

1

尝试这个 :

sed 's@<start>.*</start>@<start><ab></ab><ab></ab><ab></ab></start>@' file
于 2013-05-06T23:00:15.520 回答
0

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

于 2013-05-06T23:01:51.167 回答
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>s 之间以 . 结尾的标签a。这适用于您的示例。但如果你有<aaa></aaa>

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

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

例如

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>
于 2013-05-06T23:29:52.950 回答
0

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

于 2018-01-22T14:34:10.027 回答