2013-05-06 62 views

回答

1

试试这个:

sed '[email protected]<start>.*</start>@<start><ab></ab><ab></ab><ab></ab></start>@' file 
0

sed 's/(\<\/?)a\>/\1ab\>/g' yourfile,尽管这会得到<a></a>这是外界<start>以及...

+0

不仅**''**而且标签,如' ...' – Kent 2013-05-06 23:12:17

+0

我想我固定的,但反向引用不是我通常使用的,所以可能是错误的。 – PaulProgrammer 2013-05-07 14:43:43

+0

如果您不确定,请将其明确地写入答案。 – 2013-05-07 14:47:10

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> 

这将取代它与a结束<start> S之间的标签。这对你的例子有效。但如果你有<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> 
0

grep -rl'abc'a.txt | xargs的SED -i 'S/ABC/DEF/G'