Preciso substituir a string SALT
de 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 perl
maneira:
perl -pe 's/SALT/`cat salt.txt`/e' wp-config.php > result.txt
A chave aqui é a /e
opção regexp que nos permite usar o perl
resultado 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 newline
caracteres da sua string são alterados para @
e após a substituição, os @
caracteres são alterados novamente para newlines
, de modo que SALT
nã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.txt
está o salt, wp-config.php
está o arquivo de entrada e SALT
está 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.