仅在包含另一个字符串的某些行中替换字符串
replace string only in certain lines containing another string
我有一个很大的 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 下执行此操作?
使用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"/>
您正试图用相同的字符串替换 weight="7.0"
,但您漏掉了一些 /
。
您应该尝试以下命令:
sed '/clockRateScaler/s/weight="7.0"/weight="11.0"/' file.xml
我有一个很大的 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 下执行此操作?
使用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"/>
您正试图用相同的字符串替换 weight="7.0"
,但您漏掉了一些 /
。
您应该尝试以下命令:
sed '/clockRateScaler/s/weight="7.0"/weight="11.0"/' file.xml