GNU/Linux >> Tutoriales Linux >  >> Linux

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

Este artículo es parte de la serie de Tutoriales Unix Sed en curso. En artículos anteriores, discutimos sobre la operación de impresión de sed y la operación de eliminación de sed.

En este artículo, revisemos cómo usar el comando de sustitución sed "s".

El comando 's' es probablemente el más importante en 'sed' y tiene muchas opciones diferentes.

El comando `s' intenta hacer coincidir el espacio del patrón con el REGEXP proporcionado; si la coincidencia tiene éxito, entonces la parte del espacio del patrón que coincidió se reemplaza con REEMPLAZO.

Syntax:

#sed 'ADDRESSs/REGEXP/REPLACEMENT/FLAGS' filename
#sed 'PATTERNs/REGEXP/REPLACEMENT/FLAGS' filename
  • s es un comando sustituto
  • / es un delimitador
  • REGEXP es una expresión regular para coincidir
  • REPLACEMENT es un valor para reemplazar

Las BANDERAS pueden ser cualquiera de las siguientes

  • g Reemplace todas las instancias de REGEXP con REPLACEMENT
  • n Podría ser cualquier número, reemplace la enésima instancia de REGEXP con REPLACEMENT.
  • p Si se realizó una sustitución, imprime el nuevo espacio de patrón.
  • hago coincidir REGEXP sin distinguir entre mayúsculas y minúsculas.
  • w archivo Si se realizó una sustitución, escriba el resultado en el archivo dado.
  • Podemos usar diferentes delimitadores ( uno de @ %; :) en lugar de /

Primero creemos el archivo geekstuff.txt que se usará en todos los ejemplos mencionados a continuación.

$ cat thegeekstuff.txt
# Instruction Guides
1. Linux Sysadmin, Linux Scripting etc.
2. Databases - Oracle, mySQL etc.
3. Security (Firewall, Network, Online Security etc)
4. Storage in Linux
5. Productivity (Too many technologies to explore, not much time available)
#  Additional FAQS
6. Windows- Sysadmin, reboot etc.

Revisemos ahora algunos ejemplos interesantes de sustitución.

1. Sustituya Word “Linux” por “Linux-Unix” usando sed s//

En el siguiente ejemplo, en la línea de salida “1. Linux-Unix Sysadmin, Linux Scripting, etc.” solo que primero Linux es reemplazado por Linux-Unix. Si no se especifican banderas, se reemplaza la primera coincidencia de la línea.

$ sed 's/Linux/Linux-Unix/' thegeekstuff.txt
# Instruction Guides
1. Linux-Unix Sysadmin, Linux Scripting etc.
2. Databases - Oracle, mySQL etc.
3. Security (Firewall, Network, Online Security etc)
4. Storage in Linux-Unix
5. Productivity (Too many technologies to explore, not much time available)
#  Additional FAQS
6. Windows- Sysadmin, reboot etc.

2. Sustituya todas las apariencias de una palabra usando sed s//g

El siguiente comando sed reemplaza todas las apariciones de Linux a Linux-Unix usando el indicador de sustitución global "g".

$ sed 's/Linux/Linux-Unix/g' thegeekstuff.txt
# Instruction Guides
1. Linux-Unix Sysadmin, Linux-Unix Scripting etc.
2. Databases - Oracle, mySQL etc.
3. Security (Firewall, Network, Online Security etc)
4. Storage in Linux-Unix
5. Productivity (Too many technologies to explore, not much time available)
#  Additional FAQS
6. Windows- Sysadmin, reboot etc.

3. Sustituir solo la segunda ocurrencia de una palabra usando sed s//2

En el siguiente ejemplo, en la línea de salida “1. Linux Sysadmin, Linux-Unix Scripting, etc.” solo la segunda ocurrencia de Linux es reemplazada por Linux-Unix.

$ sed 's/Linux/Linux-Unix/2' thegeekstuff.txt
# Instruction Guides
1. Linux Sysadmin, Linux-Unix Scripting etc.
2. Databases - Oracle, mySQL etc.
3. Security (Firewall, Network, Online Security etc)
4. Storage in Linux
5. Productivity (Too many technologies to explore, not much time available)
#  Additional FAQS
6. Windows- Sysadmin, reboot etc.

4. Escribir cambios en un archivo e imprimir los cambios usando sed s//gpw

El siguiente ejemplo tiene sustitución con tres banderas. Sustituye toda la ocurrencia de Linux a Linux-Unix e imprime la salida sustituida y escribe lo mismo en el archivo dado.

$ sed -n 's/Linux/Linux-Unix/gpw output' thegeekstuff.txt
1. Linux-Unix Sysadmin, Linux-Unix Scripting etc.
4. Storage in Linux-Unix
$ cat output
1. Linux-Unix Sysadmin, Linux-Unix Scripting etc.
4. Storage in Linux-Unix

5. Sustituya solo cuando la línea coincida con el patrón usando sed

En este ejemplo, si la línea coincide con el patrón "-", entonces reemplaza todos los caracteres de "-" con el vacío.

$ sed '/\-/s/\-.*//g' thegeekstuff.txt
# Instruction Guides
1. Linux Sysadmin, Linux Scripting etc.
2. Databases
3. Security (Firewall, Network, Online Security etc)
4. Storage in Linux
5. Productivity (Too many technologies to explore, not much time available)
#  Additional FAQS
6. Windows

6. Eliminar el último X número de caracteres de cada línea usando sed

Este ejemplo sed elimina los últimos 3 caracteres de cada línea.

$ sed 's/...$//' thegeekstuff.txt
# Instruction Gui
1. Linux Sysadmin, Linux Scripting e
2. Databases - Oracle, mySQL e
3. Security (Firewall, Network, Online Security e
4. Storage in Li
5. Productivity (Too many technologies to explore, not much time availab
#  Additional F
6. Windows- Sysadmin, reboot e

7. Eliminar comentarios usando sed

Elimine todas las líneas de comentarios de un archivo como se muestra a continuación usando el comando sed.

$  sed -e 's/#.*//' thegeekstuff.txt

1. Linux Sysadmin, Linux Scripting etc.
2. Databases - Oracle, mySQL etc.
3. Security (Firewall, Network, Online Security etc)
4. Storage in Linux
5. Productivity (Too many technologies to explore, not much time available)

6. Windows- Sysadmin, reboot etc.

8. Eliminar comentarios y líneas vacías usando sed

En este ejemplo, hay dos comandos separados por ';'

  • El primer comando reemplaza las líneas que comienzan con # por las líneas en blanco
  • El segundo comando elimina las líneas vacías.
$ sed -e 's/#.*//;/^$/d'  thegeekstuff.txt
1. Linux Sysadmin, Linux Scripting etc.
2. Databases - Oracle, mySQL etc.
3. Security (Firewall, Network, Online Security etc)
4. Storage in Linux
5. Productivity (Too many technologies to explore, not much time available)
6. Windows- Sysadmin, reboot etc.

9. Convierta líneas nuevas de DOS (CR/LF) a formato Unix usando sed

Copie el archivo DOS a Unix, puede encontrar \r\n al final de cada línea.

Este ejemplo convierte el formato de archivo DOS al formato de archivo Unix usando el comando sed.

$sed 's/.$//' filename

10. Eliminar etiquetas HTML del archivo usando sed

En este ejemplo, la expresión regular dada en el comando sed coincide con las etiquetas html y las reemplaza con el vacío.

$ sed -e 's/<[^>]*>//g'
This <b> is </b> an <i>example</i>.
This  is  an example.

Linux
  1. buscar y copiar archivos usando Bash

  2. ¿Cómo saber los finales de línea en un archivo de texto?

  3. Buscar y reemplazar en secuencias de comandos de shell

  4. encuentra el texto coincidente y reemplaza la siguiente línea

  5. Encuentre y reemplace texto en un archivo entre un rango de líneas usando sed

Cómo encontrar y reemplazar texto en Vim

Tutorial de Unix Sed:Impresión de líneas de archivos usando direcciones y patrones

Tutorial de Unix Sed:eliminar líneas de archivos usando direcciones y patrones

Tutorial de Unix Sed:Cómo escribir en un archivo usando 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