Localizar e substituir por Bash

0

Estou tentando substituir algum texto por outro texto em um arquivo de configuração. Eu criei um script com o comando sed , mas estou recebendo um erro.

Linha original:

<property name="encryptData">false</property>

Nova linha:

<property name="encryptData">true</property>

Comando:

sed -i -e 's/<property name="encryptData">false</property>/<property name="encryptData">true</property>/g' /Users/User/Desktop/mirth.cfg

Erro:

sed: 1: "s/<property name="encry ...": bad flag in substitute command: '<'
    
por aswiftboobtotheface 11.01.2016 / 03:00

2 respostas

5

O comando é quase perfeito. Seu problema é que você precisa preceder a barra em </property> com uma barra invertida \ como essa.

sed -i -e 's/<property name="encryptData">false<\/property>/<property name="encryptData">true<\/property>/g' /Users/User/Desktop/mirth.cfg

Observado eu fiz isso para ambas as ocorrências.

Desta forma, o sed saberá que esta barra é parte do fluxo e não faz parte do comando 's'.

Espero que isso corrija seu problema.

    
por Torrien 11.01.2016 / 03:27
2

Como o padrão que você está procurando contém / , altere a sintaxe de comando delimitado por sed . Por exemplo, você pode usar _ e também usar agrupamento de padrões para poder usar a referência inversa em substituição:

sed -r 's_(<property name="encryptData">)false(</property>)_true_' /Users/User/Desktop/mirth.cfg

Além disso, é sempre bom fazer um backup usando a opção -i :

sed -ri.bak 's_(<property name="encryptData">)false(</property>)_true_' /Users/User/Desktop/mirth.cfg

Agora, o arquivo original será mantido como /Users/User/Desktop/mirth.cfg.bak e o arquivo modificado será /Users/User/Desktop/mirth.cfg .

    
por heemayl 11.01.2016 / 03:12