Com isso como o arquivo de entrada de amostra:
$ cat client_23.xml
<world>
<hello>collect_model = 1</hello>
<hello>enable_data = 0</hello>
<hello>session_ms = 2*60*1000</hello>
<hello>max_collect = string_integer($extract("max_collect"))</hello>
<hello>max_collect = parenting(max_collect, max_collect, 1.0e99)</hello>
<hello>output('{')</hello>
</world>
<derta-config>
<data-users>2000</data-users>
<test-users>2000</test-users>
<attributes>hello world</attributes>
<client-types>Client1</model-types>
<target>price.world</target>
</derta-config>
Podemos fazer as duas alterações usando:
$ sed 's|<hello>collect_model = 1</hello>|<hello>collect_model = 0</hello>|; \|<derta-config>|,\|</derta-config>|d' client_23.xml
<world>
<hello>collect_model = 0</hello>
<hello>enable_data = 0</hello>
<hello>session_ms = 2*60*1000</hello>
<hello>max_collect = string_integer($extract("max_collect"))</hello>
<hello>max_collect = parenting(max_collect, max_collect, 1.0e99)</hello>
<hello>output('{')</hello>
</world>
Como funciona
Nós temos dois comandos sed. O primeiro é um substituto, o segundo é uma exclusão:
-
s|<hello>collect_model = 1</hello>|<hello>collect_model = 0</hello>|
Os comandos substitutos têm o formato
s|old|new|
. Então, aquiold
é o original<hello>collect_model = 1</hello>
enew
é o substituto<hello>collect_model = 0</hello>
. -
\|<derta-config>|,\|</derta-config>|d
Isso define um intervalo de linhas. A linha de partida contém
derta-config>
e a linha final contém</derta-config>
. Todas as linhas dentro desse intervalo são excluídas pelo comando de exclusãod
.