このような文字列があるとします
<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
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>