2017-02-07 5 views
1

У меня есть большой файл xml, и я хочу заменить только weight="7.0" на weight="11.0", но только в строках, содержащих clockRateScaler, как показано ниже.заменить строку только в определенных строках, содержащих другую строку

<operator id="clockRateScaler." spec="ScaleOperator" parameter="@clockRate.c" scaleFactor="0.5" weight="7.0"/> 

Я попытался с sed

sed 'clockRateScaler/s/ weight="7.0"/ weight="7.0"' file.xml 

, но это не сработало.

Как я могу сделать это под awk или sed?

ответ

1

использованием sed

sed '/clockRateScaler/s/weight="7.0"/weight="11.0"/g' file.xml 

использованием awk

awk '/clockRateScaler/{gsub("weight=\"7.0\"", "weight=\"11.0\"")}1' file.xml 

или с помощью xmlstarlet (лучше)

xmlstarlet ed -u '/operator[@id="clockRateScaler."]/@weight' -v 11.0 file.xml 

вы получите,

<operator id="clockRateScaler." spec="ScaleOperator" parameter="@clockRate.c" scaleFactor="0.5" weight="11.0"/> 
1

Вы пытаетесь заменить weight="7.0" на эту же строку, и вы пропустили /.

Вы должны попробовать команду:

sed '/clockRateScaler/s/weight="7.0"/weight="11.0"/' file.xml 
+0

я не заметил, что первая /, благодаря –

Смежные вопросы