Necesito reemplazar una cadena SALT
en un archivo con el contenido de otro archivo. El problema es que el archivo de entrada tiene varias líneas. Probé algo como esto en mi script bash:
SALT=`cat salt.txt`;
sed "s/SALT/$SALT/" wp-config.php > result.txt
Funciona bien cuando elsal.txtes una sola línea, pero si hay más líneas falla. He leído que podría hacer PERL. Pero no sé cómo. ¿Usted me podría ayudar?
Respuesta1
De otra perl
manera:
perl -pe 's/SALT/`cat salt.txt`/e' wp-config.php > result.txt
La clave aquí es la /e
opción regexp que nos permite usar el perl
resultado de un comando como una cadena de sustitución.
Respuesta2
Si desea ceñirse a bash
, elija un carácter que no aparezca ni en su cadena ni en su archivo, digamos @
; entonces:
SALT=`< salt.txt tr '\n' '@'`
sed "s/SALT/$SALT/" wp-config.php | tr '@' '\n' > result.txt
De esta manera, antes del reemplazo, los newline
caracteres en su cadena se cambian a @
y después del reemplazo, los @
caracteres se vuelven a cambiar newlines
, por lo que SALT
ya no se trata como una matriz, sino solo como una variable que contiene una cadena larga.
Respuesta3
Puedes hacerlo:
sed -e "/SALT/{r salt.txt" -e "d}" wp-config.php > result.txt
¿Dónde salt.txt
está la sal, wp-config.php
es el archivo de entrada y SALT
es la cadena a reemplazar?
Respuesta4
perl -e 'open my $S, "<", "salt.txt" or die $!;
$salt = do { local $/ ; <$S> };
s/SALT/$salt/, print while <>;
' wp-config.php > result.txt
La primera línea abre el salt.txt
.
La segunda línea lee su contenido en la variable $salt.
El tercero toma los argumentos de la línea de comando como nombres de archivos, lee los archivos línea por línea y reemplaza la cadena.