GNU/Linux >> Tutoriales Linux >  >> Linux

Usar sed para reemplazar entre un patrón específico

Es posible con GNU sed. Elija una de estas dos formas en función de la codicia del reemplazo.

sed 's|=.*,|\L&|' file
sed 's|=[^,]*,|\L&|' file

Como dice el manual, "\L cambia el reemplazo a minúsculas hasta un \U o \E se encuentra". & es el texto que coincide con la expresión regular.

He modificado el archivo de muestra para mostrar que debes elegir sabiamente entre el geedy =.*, y los no codiciosos =[^,]*, expresiones regulares:

$ cat file
SOMENAME=WOODSTOCK,
SOMEOTHERNAME2=JIMMY,WOODSTOCK,FINISH
$ sed 's|=.*,|\L&|' file
SOMENAME=woodstock,
SOMEOTHERNAME2=jimmy,woodstock,FINISH
$ sed 's|=[^,]*,|\L&|' file
SOMENAME=woodstock,
SOMEOTHERNAME2=jimmy,WOODSTOCK,FINISH

En cualquier awk compatible con POSIX , puedes usar el tolower() función

awk -v FS='=' 'BEGIN { OFS = FS } { $2 = tolower($2) }1 ' file

Usa el mktemp() función para crear un archivo temporal para redirigir la salida del comando anterior y luego redirigir para guardar en el lugar. O usa GNU awk>=4.1 con -i inplace

Otra variante de la versión compatible con POSIX, usando match() función sería hacer

awk 'match($0, /=([^,]*),/) { str = substr($0, RSTART+1, RLENGTH-2); sub(str, tolower(str)) }1'

Linux
  1. Uso de sed para buscar y reemplazar archivos de texto en Linux

  2. Uso de Sed para buscar y reemplazar una línea entre rangos de patrones

  3. ¿Cómo reemplazar una cadena en un archivo (s)?

  4. ¿Imprimir línea anterior después de una coincidencia de patrón usando Sed?

  5. ¿Reemplazar datos entre comillas en un archivo?

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

Tutorial de Unix Sed:busque y reemplace texto dentro de un archivo usando RegEx

Tutorial de Unix Sed:Cómo escribir en un archivo usando Sed

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

Usando grep y sed para encontrar y reemplazar una cadena

¿Cómo cambiar un archivo en el lugar usando awk? (como con sed -i)