Cómo usar el comando Sed en Linux con ejemplos
SED abreviado como ‘Stream Editor’ es un potente editor de flujo de texto que puede realizar muchas funciones en archivos que buscan, encuentran, reemplazan e insertan. El comando sed es un comando compatible con expresiones regulares, lo que significa que puede comprender las expresiones regulares que se le proporcionan.
Sin embargo, SED se usa principalmente 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 y 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 comprender 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 archivo de texto a continuación (‘content.txt’) como una entrada para el comando sed examples.
$ 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.
A continuación, se muestran los ejemplos de sed más utilizados.
1. Reemplazo de cadena (palabras o caracteres)
Sed se puede utilizar 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’ por ‘Lorem’ en el archivo ‘content.txt’ para la primera aparición en cada línea:
$ sed ‘s / lorem / Lorem /’ content.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. Reemplazo de la enésima aparición de un patrón en una línea
El comando sed se puede utilizar 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) aparición 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 hasta todas las apariciones en cada línea.
Podemos usar una combinación de /1
,/2
o n
(cualquier número) y /g
para reemplazar todos los patrones de la enésima aparición de una cadena en cada línea.
En el siguiente ejemplo, todas las apariciones de la cadena ‘lorem’ serán reemplazadas por ‘Lorem’ a partir de la segunda ocurrencia 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. Busque y reemplace una cadena en un número de línea específico
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
Con el comando sed puede ver una parte de un archivo en lugar de todo el archivo. los -n
La opción se utiliza para suprimir la impresión de todo el contenido y p
Se utiliza la opción de 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 patrones
Podemos usar el siguiente comando sed para eliminar la línea que tiene el patrón de búsqueda que se menciona. En la salida, 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, utilizamos /p
bandera junto con -n
.
En la salida, podemos ver que no hay 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 la 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
Imprime un archivo
$ sed -n 'p' content.txt
La impresión contiene expresiones regulares o palabras
$ sed -n '/RedHat/p' content.txt
Imprimir si contiene dígitos
$ sed -n '/[0-9]/p' content.txt
Coincidir con 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.
Usa sed como grep
El siguiente comando sed buscará el usuario ‘root’ 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 múltiples expresiones sed, entonces necesitamos usar e
opción para encadenar los comandos sed.
Tomemos un ejemplo, para reemplazar todas las ocurrencias del «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. Inserte una 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. -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 comienza con una cadena en particular y termina con otra cadena. En el siguiente resultado, la línea que comienza con ‘lorem’ y termina con ‘texto’. esta borrado:
$ 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 la siguiente salida, podemos ver que ‘Aquí’ se agrega 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.
Inserte una 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 de Linux disponibles:
$ 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
Imprima sin líneas comentadas (#) y las 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 probar.
$ 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 regex 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
los w
La bandera se puede usar para escribir la salida en un archivo, en lugar de imprimir en la salida estándar. los 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 con los ejemplos de sed más comúnmente y más utilizados. Se puede usar sed en bash o scripts 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 implementar de inmediato cuando sea necesario. Si tiene preguntas, sugerencias o comentarios, escríbalos en el cuadro de comentarios a continuación.