with variable script bash sed substitution

bash - script - sed variable



sustituciĆ³n sed con variables de bash (4)

Las variables dentro de '' no se sustituyen en bash. Para obtener la sustitución de cadenas (o interpolación, si está familiarizado con Perl), deberá cambiarla para usar comillas dobles " lugar de las comillas simples:

$ # enclose entire expression in double quotes $ sed "s/draw($prev_number;n_)/draw($number;n_)/g" file.txt > tmp $ # or, concatenate strings with only variables inside double quotes $ # this would restrict expansion to relevant portion $ # and prevent accidental expansion for !, backticks, etc $ sed ''s/draw(''"$prev_number"'';n_)/draw(''"$number"'';n_)/g'' file.txt > tmp $ # variable cannot contain arbitrary characters $ # see link in further reading section for details $ a=''foo bar'' $ echo ''baz'' | sed ''s/baz/''"$a"''/g'' sed: -e expression #1, char 9: unterminated `s'' command


Otras lecturas:

Intentando cambiar los valores en un archivo de texto usando sed en un script bash con la línea,

sed ''s/draw($prev_number;n_)/draw($number;n_)/g'' file.txt > tmp

Esto estará en un bucle for. No estoy seguro de por qué no está funcionando. ¿Alguna sugerencia?


Puedes usar variables como a continuación. Al igual que aquí, quería reemplazar el hostname , es decir, la variable del sistema en el archivo. Estoy buscando string look.me y reemplazando esa línea completa con look.me=<system_name>

sed -i "s/.*look.me.*/look.me=`hostname`/"

También puede almacenar el valor de su sistema en otra variable y puede usar esa variable para la sustitución.

host_var= `nombre de host_var=

sed -i "s/.*look.me.*/look.me=$host_var/"

Fichero de entrada :

look.me=demonic

Salida del archivo (suponiendo que el nombre de mi sistema sea prod-cfm-frontend-1-usa-central-1 ):

look.me=prod-cfm-frontend-1-usa-central-1


las variables dentro de comillas simples no se expanden, dentro de las comillas dobles que son, use comillas dobles en este caso.

sed "s/draw($prev_number;n_)/draw($number;n_)/g" file.txt > tmp

También puedes hacer que funcione con eval , ¡pero no hagas eso!


sed "s/draw($prev_number;n_)/draw($number;n_)/g"

¿Esto funcionaría?