GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo usar el comando Sed en Linux con ejemplos

SED, abreviado como 'Stream Editor', es un poderoso editor de flujo de texto que puede realizar muchas funciones en archivos que buscan, encuentran, reemplazan e insertan. El comando sed es un comando consciente de las expresiones regulares, lo que significa que puede comprender las expresiones regulares que se le proporcionan.

Sin embargo, SED se usa principal o principalmente para la sustitución de texto. Con la ayuda de SED, podemos editar archivos sin abrirlos, lo que será mucho más rápido para encontrar y reemplazar algo en un archivo, en lugar de abrir el archivo y cambiarlo.

En este tutorial, aprenderemos el comando SED con ejemplos fáciles de usar y comprensibles en nuestro shell de Linux.

Sintaxis del comando Sed

La sintaxis del comando Sed es bastante simple de entender pero su uso es muy poderoso. Aquí está la sintaxis básica de SED de la siguiente manera:

sed OPTIONS... [SCRIPT] [INPUTFILE...]

Considere el siguiente archivo de texto ('content.txt') como una entrada para el comando de ejemplos sed.

$ cat > content.txt

lorem ipsum is a dummy text. lorem ipsum has been the industry's standard dummy text.
lorem ipsum is highly used by designers. lorem ipsum is great for developers.
lorem ipsum is used for dummy text. lorem ipsum doesn't have meaning.
learn more about dummy text.

Estos son los ejemplos sed más utilizados de la siguiente manera.

1. Sustitución de cadena (palabras o caracteres)

Sed se puede usar para buscar y reemplazar una cadena (palabras o caracteres) en la entrada. La opción s se utiliza para reemplazar una cadena. De forma predeterminada, el comando sed solo reemplaza la primera aparición de la cadena en una línea.

El siguiente comando reemplaza la palabra 'lorem' con 'Lorem' en el archivo 'content.txt' para la primera aparición en cada línea:

$ sed 's/lorem/Lorem/' contenido.txt

Aquí 'lorem' es la cadena de búsqueda y 'Lorem' es la cadena de reemplazo.

Output
$ sed 's/lorem/Lorem/' content.txt
Lorem ipsum is a dummy text. lorem ipsum has been the industry's standard dummy text.
Lorem ipsum is highly used by designers. lorem ipsum is great for developers.
Lorem ipsum is used for dummy text. lorem ipsum doesn't have meaning.
learn more about dummy text.

2. Reemplazar todas las ocurrencias de una cadena en un archivo

Para buscar y reemplazar todas las apariciones de una cadena en un archivo, use /g (reemplazo global) bandera.

En el siguiente comando, /g flag se usa para reemplazar todas las apariciones de la cadena 'lorem' con 'Lorem' en el archivo 'content.txt'.

$ sed 's/lorem/Lorem/g' content.txt
Lorem ipsum is a dummy text. Lorem ipsum has been the industry's standard dummy text.
Lorem ipsum is highly used by designers. Lorem ipsum is great for developers.
Lorem ipsum is used for dummy text. Lorem ipsum doesn't have meaning.
learn more about dummy text.

3. Reemplazar la enésima aparición de un patrón en una línea

El comando sed se puede usar con /1 ,/2 o n (cualquier número) para reemplazar la primera, segunda o enésima aparición de una cadena en una línea.

El siguiente comando reemplaza la segunda (2) ocurrencia de la palabra 'lorem' con 'Lorem' en cada línea.

$ sed 's/lorem/Lorem/2' content.txt

lorem ipsum is a dummy text. Lorem ipsum has been the industry's standard dummy text.
lorem ipsum is highly used by designers. Lorem ipsum is great for developers.
lorem ipsum is used for dummy text. Lorem ipsum doesn't have meaning.
learn more about dummy text.

Similar al comando tr, sed puede reemplazar todas las apariciones de caracteres en set1 con los caracteres correspondientes en set2 usando y/set1/set2/ .

$ echo 'a for apple' | sed -e 'y/af/AF/
Output
A For Apple

4. Reemplazar desde la enésima aparición a todas las apariciones en cada línea

Podemos usar un combo de /1 ,/2 o n (cualquier número) y /g para reemplazar todos los patrones desde la enésima aparición de una cadena en cada línea.

En el siguiente ejemplo, todas las apariciones de la cadena 'lorem' se reemplazarán con 'Lorem' desde la segunda aparición en cada línea:

$ sed 's/lorem/Lorem/2g' content.txt
lorem ipsum is a dummy text. Lorem ipsum has been the industry's standard dummy text.
lorem ipsum is highly used by designers. Lorem ipsum is great for developers.
lorem ipsum is used for dummy text. Lorem ipsum doesn't have meaning.
learn more about dummy text.

5. Buscar y reemplazar una cadena en un número de línea especificado

Con sed, podemos restringir la función solo para reemplazar la cadena en un número de línea específico.

En el siguiente comando, podemos encontrar que solo la segunda línea es reemplazada por la cadena 'Lorem'.

$ sed '2 s/lorem/Lorem/' content.txt

lorem ipsum is a dummy text. lorem ipsum has been the industry's standard dummy text.
Lorem ipsum is highly used by designers. Lorem ipsum is great for developers.
lorem ipsum is used for dummy text. lorem ipsum doesn't have meaning.
learn more about dummy text.

6. Mostrar texto parcial de un archivo

Usando el comando sed puede ver una parte de un archivo en lugar de todo el archivo. El -n La opción se usa para suprimir la impresión de todo el contenido y p se utiliza la opción imprimir líneas específicas.

El siguiente comando imprimirá líneas de 2 a 4:

$ sed -n 2,4p content.txt
lorem ipsum is highly used by designers. lorem ipsum is great for developers.
lorem ipsum is used for dummy text. lorem ipsum doesn't have meaning.
learn more about dummy text.

7. Mostrar todo el contenido excepto líneas particulares

El comando Sed permite mostrar todo el contenido del archivo excepto líneas particulares. En el siguiente comando, muestre todo el contenido del archivo 'content.txt' excepto las líneas 1 y 2:

$ sed 1,2d content.txt
lorem ipsum is used for dummy text. lorem ipsum doesn't have meaning.
learn more about dummy text.

8. Mostrar todas las líneas excepto la línea de coincidencia de patrón

Podemos usar el siguiente comando sed para eliminar la línea que tiene el patrón de búsqueda que se menciona. En el resultado, la línea con "aprender" se elimina porque coincide con el patrón de búsqueda.

$ sed '/learn/d' content.txt
lorem ipsum is a dummy text. lorem ipsum has been the industry's standard dummy text.
lorem ipsum is highly used by designers. lorem ipsum is great for developers.
lorem ipsum is used for dummy text. lorem ipsum doesn't have meaning.

9. Mostrar líneas reemplazadas

Para imprimir las líneas reemplazadas, hacemos uso de /p bandera junto con -n .

En la salida, podemos ver que no está la última línea porque no tenía el patrón de búsqueda 'lorem'.

$ sed -n 's/lorem/Lorem/p' content.txt

Lorem ipsum is a dummy text. lorem ipsum has been the industry's standard dummy text.
Lorem ipsum is highly used by designers. lorem ipsum is great for developers.
Lorem ipsum is used for dummy text. lorem ipsum doesn't have meaning.

Más ejemplos de banderas 'p' y 'n'

Imprimir primera línea

$ sed -n '1p' content.txt

Imprimir rango de línea

$ sed -n '1,4p' content.txt

Imprimir varias líneas

$ sed -n '1p;4p' content.txt

Imprimir un archivo

$ sed -n 'p' content.txt

Imprimir contiene expresiones regulares o palabra

$ sed -n '/RedHat/p' content.txt

Imprimir si contiene dígitos

$ sed -n '/[0-9]/p' content.txt

Hacer coincidir expresiones regulares y reemplazar

$ sed -n 's/^L/Matched--&/p' content.txt
Output
Matched--Lorem ipsum is a dummy text. Lorem ipsum has been the industry's standard dummy text.
Matched--Lorem ipsum is highly used by designers. Lorem ipsum is great for developers.
Matched--Lorem ipsum is used for dummy text. Lorem ipsum doesn't have meaning.

Usar sed como grep

El siguiente comando sed buscará al usuario 'raíz' en el archivo '/etc/passwd':

$ sed -n '/root/p' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

10. Combinar comandos SED

Si tenemos que realizar varias expresiones sed, entonces debemos usar e opción para encadenar los comandos sed.

Tomemos un ejemplo, para reemplazar todas las ocurrencias de "lorem" con "Lorem" y eliminar la línea que coincide con el patrón de búsqueda.

$ sed -e 's/lorem/Lorem/g' -e '/learn/d' content.txt

Lorem ipsum is a dummy text. Lorem ipsum has been the industry's standard dummy text.
Lorem ipsum is highly used by designers. Lorem ipsum is great for developers.
Lorem ipsum is used for dummy text. Lorem ipsum doesn't have meaning.

11. Insertar línea en blanco después de cada línea

Usando G opción puede insertar una o varias líneas en blanco en un archivo.

El siguiente comando inserta una sola línea en blanco entre las líneas:

$ sed G content.txt

lorem ipsum is a dummy text. lorem ipsum has been the industry's standard dummy text.

lorem ipsum is highly used by designers. lorem ipsum is great for developers.

lorem ipsum is used for dummy text. lorem ipsum doesn't have meaning.

learn more about dummy text.

Para insertar dos líneas en blanco, ejecute el siguiente comando:

$ sed 'G;G' content.txt

lorem ipsum is a dummy text. lorem ipsum has been the industry's standard dummy text.

lorem ipsum is highly used by designers. lorem ipsum is great for developers.

lorem ipsum is used for dummy text. lorem ipsum doesn't have meaning.

learn more about dummy text.

11. Edite y cree una copia de seguridad del archivo original

Sed permite editar un archivo y al mismo tiempo crear una copia de seguridad del archivo original. Usamos 'i.' para el nombre del archivo de copia de seguridad y -e edición.

El siguiente comando crea una copia de seguridad del archivo original 'content.txt' como 'content.txt.bak'

$ sed -i.bak -e 's/lorem/Lorem/g' content.txt
Results
$ cat content.txt
Lorem ipsum is a dummy text. Lorem ipsum has been the industry's standard dummy text.
Lorem ipsum is highly used by designers. Lorem ipsum is great for developers.
Lorem ipsum is used for dummy text. Lorem ipsum doesn't have meaning.
learn more about dummy text.
$ cat content.txt.bak
lorem ipsum is a dummy text. lorem ipsum has been the industry's standard dummy text.
lorem ipsum is highly used by designers. lorem ipsum is great for developers.
lorem ipsum is used for dummy text. lorem ipsum doesn't have meaning.
learn more about dummy text.

12. Eliminar una línea con un patrón

Con este comando sed, puede eliminar una línea que comience con una cadena en particular y termine con otra cadena. En el siguiente resultado, la línea que comienza con 'lorem' y termina con 'text.' se elimina:

$ sed -e 's/^lorem.*text.$//g' content.txt
Output
lorem ipsum is highly used by designers. lorem ipsum is great for developers.
lorem ipsum is used for dummy text. lorem ipsum doesn't have meaning.
learn more about dummy text.

13. Agregar cadena a las líneas

Podemos ejecutar el siguiente comando para agregar algo de contenido antes de cada línea usando expresiones regulares.

En el siguiente resultado, podemos ver que se agrega 'Aquí' delante de cada línea.

$ sed -e 's/.*/Here &/' content.txt
Here lorem ipsum is a dummy text. lorem ipsum has been the industry's standard dummy text.
Here lorem ipsum is highly used by designers. lorem ipsum is great for developers.
Here lorem ipsum is used for dummy text. lorem ipsum doesn't have meaning.
Here learn more about dummy text.

Insertar cadena antes de cada línea:

$ sed 'i \inserted line' content.txt
inserted line
Lorem ipsum is a dummy text. Lorem ipsum has been the industry's standard dummy text.
inserted line
Lorem ipsum is highly used by designers. Lorem ipsum is great for developers.
inserted line
Lorem ipsum is used for dummy text. Lorem ipsum doesn't have meaning.
inserted line
learn more about dummy text.

Agregue una cadena después de cada línea:

$ sed 'a \Appended line' content.txt
Lorem ipsum is a dummy text. Lorem ipsum has been the industry's standard dummy text.
Appended line
Lorem ipsum is highly used by designers. Lorem ipsum is great for developers.
Appended line
Lorem ipsum is used for dummy text. Lorem ipsum doesn't have meaning.
Appended line
learn more about dummy text.
Appended line

14. Extraiga los nombres de usuario del archivo /etc/passwd

El comando Sed se puede usar fácilmente para obtener toda la lista de todos los nombres de usuario del archivo '/etc/passwd'.

El siguiente comando sed extraerá todos los nombres de usuario disponibles en Linux:

$ sed 's/\([^:]*\).*/\1/' /etc/passwd
root
daemon
bin
sys
sync
man
lp
news
uucp
proxy
backup
list
gnats
nobody
systemd-network
systemd-resolve
syslog
messagebus
uuidd
debian-spamd
admin

15. Imprimir línea sin líneas comentadas (#) y líneas vacías

Imprimir líneas sin comentarios (#) y líneas vacías son simples con sed.

Podemos ejecutar el siguiente comando para imprimir todas las líneas que no contienen el símbolo de comentario (#) y todas las líneas vacías.

$ sed -e 's/#.*//;/^$/d' content.txt

Para eliminar solo las líneas comentadas:

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

16. Extraiga todas las direcciones IP con sed de una cadena

Veamos cómo extraer direcciones IP usando el comando sed con expresiones regulares. He agregado algunas direcciones IP a 'content.txt' para realizar pruebas.

$ cat content.txt
lorem ipsum is a dummy text. lorem ipsum has been the industry's standard dummy text.
lorem ipsum is highly used by designers. lorem ipsum is great for developers.
lorem ipsum is used for dummy text. lorem ipsum doesn't have meaning.
learn more about dummy text.
122.65.49.2
221.11.165.233
219.158.9.97
219.158.19.137

Ahora use expresiones regulares para extraer la dirección IP del archivo 'content.txt' de la siguiente manera:

$ sed '/\n/!s/[0-9.]\+/\n&\n/;/^\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}\n/P;D' content.txt
122.65.49.2
221.11.165.233
219.158.9.97
219.158.19.137

Encontré otro comando fácil para obtener los mismos resultados, verifique a continuación:

$ sed -n '/[0-9]/p' content.txt.bak
122.65.49.2
221.11.165.233
219.158.9.97
219.158.19.137

También podemos combinar sed con otro comando usando tuberías (|), verifique el siguiente ejemplo:

$ ip addr | sed -n '/inet/p' | sed -e 's/  */ /g' | cut -d ' ' -f3
127.0.0.1/8
::1/128
75.208.225.10/24
2600:3c02::e03c:92ff:fe60:d7e2/64
fe80::f03c:92ef:fe60:d7e2/64

17. Redirigir y escribir en un archivo

El w bandera se puede utilizar para escribir la salida en un archivo, en lugar de imprimir en la salida estándar. El w El comando requiere un nombre de archivo en el que se escribirá la salida.

El siguiente comando sed redirigirá la salida a un nuevo archivo 'rootpwd.txt':

$ sed -n '/root/w rootpwd.txt' /etc/passwd
$ cat rootpwd.txt
root:x:0:0:root:/root:/bin/bash

Conclusión

En este tutorial de comandos de Linux, aprendimos la sintaxis básica del comando sed y los ejemplos de sed más utilizados. Se puede usar sed en bash o secuencias de comandos de shell para realizar diferentes tareas automatizadas en la manipulación de texto y operaciones sed en el shell de Linux. Con este tutorial, uno puede comprender fácilmente sed y comenzar a implementarlo de inmediato cuando sea necesario. Si tiene alguna pregunta, sugerencia o comentario, escríbalos en el cuadro de comentarios a continuación.


Linux
  1. Cómo usar el comando Hexdump de Linux con ejemplos prácticos

  2. Cómo usar tuberías y tuberías con nombre en Linux (con ejemplos)

  3. Comando SCP en Linux:cómo usarlo, con ejemplos

  4. Cómo usar el comando Rmmod en Linux con ejemplos

  5. Cómo usar el comando Vmstat en Linux explicado con ejemplos

Cómo usar el comando who en Linux con ejemplos

Comando alias de Linux:cómo usarlo con ejemplos

Cómo usar el comando gunzip de Linux con ejemplos

Cómo usar el comando rm de Linux con ejemplos

Cómo instalar y usar el comando Ack en Linux con ejemplos

Cómo usar el comando de suspensión en Linux:explicado con ejemplos