GNU/Linux >> Tutoriales Linux >  >> Linux

sed:¿cómo reemplazar la línea si se encuentra o agregar al final del archivo si no se encuentra?

En realidad es bastante simple con sed :si una línea coincide, simplemente cópiela en el h espacio antiguo entonces s sustituir el valor.
En la $ línea t ex cambie el espacio de retención y el espacio del patrón y luego verifique si este último está vacío. Si no está vacío, significa que la sustitución ya se realizó, por lo que no hay nada que hacer. Si está vacío, eso significa que no se encontró ninguna coincidencia, así que reemplace el espacio del patrón con la variable=value deseada. luego agregue a la línea actual en el búfer de retención. Finalmente, ex cambiar de nuevo:

sed '/^FOOBAR=/{h;s/=.*/=newvalue/};${x;/^$/{s//FOOBAR=newvalue/;H};x}' infile

Lo anterior es gnu sed sintaxis. Portátil:

sed '/^FOOBAR=/{
h
s/=.*/=newvalue/
}
${
x
/^$/{
s//FOOBAR=newvalue/
H
}
x
}' infile

Esto probablemente se puede acortar. No es un solo comando sed y también usa grep, pero esto parece ser básicamente lo que estás buscando. Es una sola línea y edita el archivo en el lugar (sin archivos temporales).

grep -q "^FOOBAR=" file && sed "s/^FOOBAR=.*/FOOBAR=newvalue/" -i file || 
    sed "$ a\FOOBAR=newvalue" -i file

Aquí hay un sed más simple enfoque, ya que no encuentro sed hold space fácil de trabajar. Si se siente cómodo con hold space , el uso del enfoque don_crissti brinda una oportunidad adicional para preservar cualquier cosa de la línea existente, pero esto suele ser muy raro.

En este enfoque, simplemente imprime todo menos la línea que desea eliminar y luego, al final, agrega el reemplazo.

sed -n -e '/^FOOBAR=/!p' -e '$aFOOBAR=newvalue' infile

Linux
  1. Cómo agregar texto al final del archivo en Linux

  2. ¿Cómo insertar texto antes de la primera línea de un archivo?

  3. ¿Cómo agregar varias líneas a un archivo?

  4. archivo:comando no encontrado

  5. Cómo reemplazar una cadena en varios archivos en la línea de comando de Linux

Cómo leer un archivo línea por línea en Bash

Cómo quitar líneas de un archivo usando el comando Sed

Tutorial de Unix Sed:anexar, insertar, reemplazar y contar líneas de archivos

Cómo usar Sed para buscar y reemplazar una cadena en un archivo

¿Cómo inserto texto en la primera línea de un archivo usando sed?

¿Cómo agregar una línea en un archivo comprimido sin descomprimir?