Substitua a string pelo conteúdo do arquivo multilinha

Substitua a string pelo conteúdo do arquivo multilinha

Preciso substituir a string SALTde um arquivo pelo conteúdo de outro arquivo. O problema é que o arquivo de entrada possui multilinhas. Eu tentei algo assim no meu script bash:

SALT=`cat salt.txt`;
sed "s/SALT/$SALT/" wp-config.php > result.txt

Funciona bem quando osal.txté de linha única, mas se houver mais linhas ele falhará. Eu li que poderia fazer PERL. Mas não sei como. Você poderia me ajudar?

Responder1

Outra perlmaneira:

perl -pe 's/SALT/`cat salt.txt`/e' wp-config.php > result.txt

A chave aqui é a /eopção regexp que nos permite usar o perlresultado de um comando como uma string de substituição.

Responder2

Se você quiser continuar bash, escolha um caractere que não apareça nem na sua string nem no seu arquivo, digamos @; então:

SALT=`< salt.txt tr '\n' '@'`
sed "s/SALT/$SALT/" wp-config.php | tr '@' '\n' > result.txt

Dessa forma, antes da substituição, os newlinecaracteres da sua string são alterados para @e após a substituição, os @caracteres são alterados novamente para newlines, de modo que SALTnão seja mais tratado como um array, mas apenas como uma variável contendo uma string longa.

Responder3

Você consegue fazer isso:

sed -e "/SALT/{r salt.txt" -e "d}" wp-config.php  > result.txt

Onde salt.txtestá o salt, wp-config.phpestá o arquivo de entrada e SALTestá a string a ser substituída

Responder4

perl -e 'open my $S, "<", "salt.txt" or die $!;
         $salt = do { local $/ ; <$S> };
         s/SALT/$salt/, print while <>;
        ' wp-config.php > result.txt

A primeira linha abre o arquivo salt.txt.
A segunda linha lê seu conteúdo na variável $salt.
O terceiro considera os argumentos da linha de comando como nomes de arquivos, lê os arquivos linha por linha e substitui a string.

informação relacionada