Primero, hay una variable que contiene un carácter especial en el script bash. aquí está el ejemplo. lista.txt:
user = root
password = 1234
Guión de bash:
#!/bin/sh
var1 = var&2018+&
find . -name "list.txt" -exec sed -i "s/1234/"$var1"/g" {} +
cuando ejecuté el script, el resultado es: var12342018+1234.
Actualización 1 (respuesta de Oliv):
var1='var&2018+&'
find . -name "*list.txt" -exec bash -c 'sed -i "s/1234/$2/g" $1' _ {} "$var1" \;
y el resultado sigue siendo: contraseña = var12342018+1234
tal vez alguien pueda ayudarme. gracias
Respuesta1
Primero necesitas citar tu var1
variable.
Puedes usar bash -c
en tu find
comando para dar la contraseña como una variable:
var1='var\&2018+\&'
find . -name "list.txt" -exec bash -c 'sed -i "s/1234/$2/g" $1' _ {} "$var1" \;
Respuesta2
Podría ayudarle a comprender el problema que tiene al saber que &
es un carácter especial que representa la coincidencia completa de su expresión regular.
Como 1234
se encuentra, lo está reemplazando con var12342018+1234
, los dos &
se convierten en la cadena coincidente.
El otro punto que me gustaría resaltar es realmente una preferencia personal, pero al usar find ... -exec
with {}
no me gusta esta sintaxis, normalmente la termino con\;
prefiero usar xargs
find . -name list.txt | xargs sed -i 's/1234/var&2018+&/g'
tenga en cuenta que la terminación g la reemplazaría tantas veces como se encuentre...
Además, esto podría ser obvio. No sé cuántos list.txt
archivos tienes en tu subárbol, pero si solo tienes uno, no los necesitas find
.
sed -i 's/pattern/replacement/options' filename