Eu tenho
#!/usr/bin/bash
search="ldo_vrf18 {"
replace="$search"' compatible = "regulator-fixed";
regulator-name = "vrf18";
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
regulator-enable-ramp-delay = <120>;'
sed -i "s/$search/$replace/g" output.file
O resultado é
sed: -e expression #1, char 62: unterminated `s' command
Eu suspeito que alguns valores não estão sendo escapados no replace
. Existe uma maneira de escapar deles? Eu tentei sed -i 's/'"$search"'/'"$replace"'/g' output.file
com o mesmo resultado
O problema está nas novas linhas da
$replace
variável, que são interpretadassed
como fim do comando.Para resolver isso no GNU
sed
, você precisará substituir as novas linhas da sua$replace
variável por um literal\n
:Nota: A solução acima não funcionará em todas
sed
as implementações, pois é um recurso estendido em algumas versões (por exemplo, no GNUsed
). De acordo com os padrões POSIX :Portanto, em POSIX
sed
, o literal\n
perderá seu significado como uma nova linha e será tratado apenas como umn
caractere literal. Para uma solução portátil que funcione em todassed
as implementações, preceda as novas linhas reais com uma barra invertida:+ Exceto barra invertida seguida de dígito: