假设我有一个这样的字符串
<start><a></a><a></a><a></a></start>
我想像这样替换里面的<start></start>
值
<start><ab></ab><ab></ab><ab></ab><more></more><vale></value></start>
我如何使用 Sed 做到这一点?
假设我有一个这样的字符串
<start><a></a><a></a><a></a></start>
我想像这样替换里面的<start></start>
值
<start><ab></ab><ab></ab><ab></ab><more></more><vale></value></start>
我如何使用 Sed 做到这一点?
尝试这个 :
sed 's@<start>.*</start>@<start><ab></ab><ab></ab><ab></ab></start>@' file
sed 's/(\<\/?)a\>/\1ab\>/g' yourfile
,虽然那也会<a></a>
在外面<start>
......
我用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>
grep -rl 'abc' a.txt | xargs sed -i 's/abc/def/g'