Outro perl
way:
perl -pe 's/SALT/'cat salt.txt'/e' wp-config.php > result.txt
A chave aqui é a opção /e
regexp que nos permite usar um resultado do comando perl
como uma string de substituição.
Eu preciso substituir a string SALT
em 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 o salt.txt é de linha única, mas se houver mais linhas, ele falhará. Eu li que poderia fazer PERL. Mas eu não sei como. Você poderia me ajudar?
Outro perl
way:
perl -pe 's/SALT/'cat salt.txt'/e' wp-config.php > result.txt
A chave aqui é a opção /e
regexp que nos permite usar um resultado do comando perl
como uma string de substituição.
Se você quiser ficar com bash
, escolha um caracter 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
Desta forma, antes da substituição, os caracteres newline
na sua cadeia são alterados para @
e, após a substituição, os caracteres @
são alterados novamente para newlines
, para que SALT
não seja tratado como uma matriz mais, mas apenas como uma variável contendo uma longa string.
Você pode fazer isso:
sed -e "/SALT/{r salt.txt" -e "d}" wp-config.php > result.txt
Onde salt.txt
é o sal, wp-config.php
é o arquivo de entrada e SALT
é a sequência a ser substituída
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 salt.txt
.
A segunda linha lê seu conteúdo na variável $ salt.
O terceiro usa os argumentos da linha de comando como nomes de arquivos, lê os arquivos linha por linha e substitui a string.