Substituir string por conteúdo de arquivo de múltiplas linhas

4

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?

    
por Emetrop 30.03.2015 / 14:26

4 respostas

1

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.

    
por Sylvain Pineau 30.03.2015 / 14:53
1

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.

    
por kos 30.03.2015 / 15:12
1

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

    
por Helio 30.03.2015 / 15:22
0
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.

    
por choroba 30.03.2015 / 14:30