Con un solo archivo de entrada que solo contiene comentarios (comenzando con #) y VARIABLE = líneas de valor, ¿es posible reemplazar un valor para una sola variable si se encuentra y, de lo contrario, agregar el par al final del archivo si no se encuentra?
Mi método actual funciona eliminándolo en una primera pasada, luego anexándolo al final del archivo en una segunda pasada, pero este método desordena el orden de la línea (y también son dos comandos diferentes):
sed -r "/^FOOBAR=.*$/d" -i samefile &&
sed -r "$ a\FOOBAR=newvalue" -i samefile
¿Hay alguna forma de hacer esto, es decir. manteniendo el orden de las líneas, en una sola línea de sed? Si alguna otra utilidad (awk, ...) hace esto, lo tomaré sobre sed.
fuente
newvalue
se almacena en una variable?sed "/^${varName}=/{h;s/=.*/=${varValue}/};\${x;/^$/{s//${varName}=${varValue}/;H};x}" ${VARFILE}
con variables, comillas dobles para permitir la sustitución de variables y escapar de una$
que no es una sustitución en este momento, adicionalmente si su valor está almacenado en$$varName
:sed "/^${varName}=/{h;s/=.*/=${!varName}/};\${x;/^$/{s//${varName}=${!varName}/;H};x}" ${VARFILE}