Introducción al Editor sed
El término sed significa editor de secuencias . Sed puede tomar su entrada desde la entrada estándar, aplicar las ediciones solicitadas en la transmisión y poner automáticamente los resultados en la salida estándar. La sintaxis sed permite especificar un archivo de entrada en la línea de comandos.
No necesita interactuar con el editor sed mientras se está ejecutando; por lo tanto, también se le ha denominado editor por lotes. Esto contrasta con editores como vi y ed, que son interactivos. Debido a que sed no requiere interacción, puede colocar comandos sed en un script. Puede llamar al archivo de script y ejecutarlo contra el archivo de datos para realizar operaciones de edición repetitivas.
Formato de comando
A continuación se muestra la sintaxis del comando sed:
# sed [options] 'action [args]' files [ > outfile]
El editor sed es capaz de realizar sustituciones de patrones de texto y eliminaciones de patrones de texto utilizando la sintaxis de expresiones regulares. Estos son los mismos caracteres de expresión regular utilizados por grep.
El comando sed ofrece capacidades que son una extensión de la edición de texto interactivo. Si necesita buscar y reemplazar cadenas de texto en una gran cantidad de archivos, sed es más útil.
Comandos de edición
El editor sed usa comandos de edición (que se muestran en la tabla) que son similares a los que usaría para vi y ed.
Comando | Función |
---|---|
d | Elimina línea(s) |
p | Imprime línea(s) |
r | Lee un archivo |
s | Sustituye una cadena por otra |
w | Escribe en un archivo |
El comando sed tiene dos opciones:
Opción | Función |
---|---|
-n | Suprime la salida predeterminada |
-f | Lee comandos sed desde un archivo de script |
Datos de muestra utilizados en los ejemplos
Los siguientes ejemplos ejecutan comandos sed contra el archivo llamado "data.txt". El contenido del archivo data.txt es el siguiente.
# cat data.txt northwest NW Joel Craig 10 western WE Sharon Kelly 40 southwest SW Chris Foster 33 southern SO May Chin 45 southeast SE Derek Johnson 3 eastern EA Susan Beal 34 northeast NE TJ Nichols 67 north NO Val Shultz 91 central CT Sheri Watson 44
Uso de sed para imprimir texto
Ejemplo 1:Rango de impresión de líneas
El siguiente ejemplo muestra el uso del comando p (imprimir), que imprime un rango de líneas en la salida estándar. El rango se especifica con una dirección inicial seguida de una coma y luego la dirección final. La salida predeterminada de sed es cada línea que lee. Para suprimir la salida predeterminada, use la opción -n.
# sed -n '3,5p' data.txt southwest SW Chris Foster 33 southern SO May Chin 45 southeast SE Derek Johnson 3
Ejemplo 2:Impresión de líneas que contienen un patrón específico
El siguiente comando imprime todas las líneas con el patrón hacia el oeste. Utilice la barra diagonal (/) para delimitar la expresión regular.
# sed -n '/west/p' data.txt northwest NW Joel Craig 10 western WE Sharon Kelly 40 southwest SW Chris Foster 33
Ejemplo 3:línea de impresión con varios patrones
El siguiente comando imprime la primera línea que contiene el patrón oeste, hasta e incluyendo la siguiente línea que contiene el patrón sur.
# sed -n '/west/,/southern/p' data.txt northwest NW Joel Craig 10 western WE Sharon Kelly 40 southwest SW Chris Foster 33 southern SO May Chin 45
Ejemplo 4:Línea de impresión con patrón y todas las líneas posteriores
El siguiente comando imprime la primera línea que contiene el patrón Chris, hasta la última línea del archivo.
# sed -n '/Chris/,$p' data.txt southwest SW Chris Foster 33 southern SO May Chin 45 southeast SE Derek Johnson 3 eastern EA Susan Beal 34 northeast NE TJ Nichols 67 north NO Val Shultz 91 central CT Sheri Watson 44
Ejemplo 5:Funcionalidad similar a grep
El patrón puede contener los caracteres de expresión regular utilizados por grep. El siguiente ejemplo imprime todas las líneas que comienzan con una s y terminan con un 5.
# sed -n '/^s.*5$/p' data.txt southern SO May Chin 45
Uso de sed para sustituir texto
Comando | Ejemplo | Acción de edición |
---|---|---|
s | sed s/x/y/opción | Buscar y reemplazar. El patrón de búsqueda x se reemplaza por el patrón y. El patrón de búsqueda y reemplazo son expresiones regulares en la mayoría de los casos, y el comportamiento de búsqueda y reemplazo puede verse influenciado por varias opciones. |
y | sed y/abc/xyz/ | Reemplace cada carácter del conjunto de caracteres de origen con el carácter que tiene la misma posición en el conjunto de caracteres de destino. |
Ejemplo 1:Buscar y sustituir un patrón específico
Los s de sed El comando permite que se produzca una operación de búsqueda y sustitución en el texto. El comando utiliza una búsqueda de patrones y un reemplazo de cadena literal. Los caracteres de cadena de reemplazo se toman literalmente sin expansión de metacaracteres.
# sed 's/3/X/' data.txt northwest NW Joel Craig 10 western WE Sharon Kelly 40 southwest SW Chris Foster X3 southern SO May Chin 45 southeast SE Derek Johnson X eastern EA Susan Beal X4 northeast NE TJ Nichols 67 north NO Val Shultz 91 central CT Sheri Watson 44
El comando sed verifica cada línea del archivo y sustituye la primera aparición de la cadena anterior con la cadena nueva. Las apariciones posteriores de la cadena anterior dentro de la misma línea no se modifican.
Ejemplo 2:Buscar y sustituir un patrón específico globalmente
El siguiente ejemplo muestra la g (global) comando con las s (buscar y sustituir) y reemplaza todas las apariciones de la cadena anterior con la cadena nueva.
# sed 's/3/X/g' data.txt northwest NW Joel Craig 10 western WE Sharon Kelly 40 southwest SW Chris Foster XX southern SO May Chin 45 southeast SE Derek Johnson X eastern EA Susan Beal X4 northeast NE TJ Nichols 67 north NO Val Shultz 91 central CT Sheri Watson 44
Ejemplo 3:Buscar y sustituir con patrón de búsqueda incluido en la sustitución
Ocasionalmente, con una búsqueda y sustitución, la cadena anterior formará parte de la nueva cadena de reemplazo, lo que puede lograr colocando un &(y comercial) en la cadena de reemplazo. La ubicación de &determina la ubicación de la cadena anterior en la cadena de reemplazo.
El objetivo de los siguientes ejemplos es escribir un comando que busque todas las líneas que terminan con un solo dígito en el último campo y reemplazar el solo dígito con el número de un solo dígito más la cadena Single Digit.
Para identificar correctamente las líneas con números de un solo dígito en el último campo, considere el siguiente comando sed. Las pestañas separan los campos con cada línea.
sed -n '/ [0-9]$/p' data.txt southeast SE Derek Johnson 3
El siguiente comando busca todas las líneas que terminan con un solo dígito en el último campo y reemplaza el solo dígito con el número de un solo dígito más la cadena Single Digit.
# sed 's/ [0-9]$/& Single Digit/' data.txt northwest NW Joel Craig 10 western WE Sharon Kelly 40 southwest SW Chris Foster 33 southern SO May Chin 45 southeast SE Derek Johnson 3 Single Digit eastern EA Susan Beal 34 northeast NE TJ Nichols 67 north NO Val Shultz 91 central CT Sheri Watson 44
Uso de sed para eliminar texto
Ejemplo 1:eliminar un rango de líneas
El siguiente comando elimina las líneas 4 a 8 de la salida.
# sed '4,8d' data.txt northwest NW Joel Craig 10 western WE Sharon Kelly 40 southwest SW Chris Foster 33 central CT Sheri Watson 44
Ejemplo 2:Eliminación de líneas que contienen un patrón específico
El siguiente comando elimina cualquier línea que contenga el patrón oeste.
# sed '/west/d' data.txt southern SO May Chin 45 southeast SE Derek Johnson 3 eastern EA Susan Beal 34 northeast NE TJ Nichols 67 north NO Val Shultz 91 central CT Sheri Watson 44
Ejemplo 3
El siguiente comando elimina cualquier línea que comience con el patrón oeste.
# sed '/^west/d' data.txt northwest NW Joel Craig 10 southwest SW Chris Foster 33 southern SO May Chin 45 southeast SE Derek Johnson 3 eastern EA Susan Beal 34 northeast NE TJ Nichols 67 north NO Val Shultz 91 central CT Sheri Watson 44
Ejemplo 4
El siguiente comando elimina el rango de líneas que comienza con la primera línea que contiene el patrón sur, hasta la siguiente línea del archivo que contiene el norte.
# sed '/south/,/north/d' data.txt northwest NW Joel Craig 10 western WE Sharon Kelly 40 north NO Val Shultz 91 central CT Sheri Watson 44
Funcionalidad adicional de sed:edición de comandos
Los comandos adicionales del editor sed se muestran en la siguiente tabla.
Comando | Función |
---|---|
a | Agrega texto |
c | Cambia el texto en la línea actual con texto nuevo |
yo | Inserta texto encima de la línea actual |
Colocar ediciones múltiples en un solo comando sed
Hay momentos en los que desea realizar varias ediciones en el archivo. En lugar de usar múltiples comandos sed, puede usar la opción -e para colocar las ediciones en la misma línea de comando. Las ediciones se realizan en el orden que especifique.
Ejemplo 1
Eliminar líneas con cuidado. Puede realizar ediciones en una línea de texto y, posteriormente, eliminar esa línea de texto de la salida. Esto ocurre en el siguiente ejemplo con la Línea 1 del archivo de entrada.
# sed -e 's/north/North/' -e '1,4d' data.txt southeast SE Derek Johnson 3 eastern EA Susan Beal 34 Northeast NE TJ Nichols 67 North NO Val Shultz 91 central CT Sheri Watson 44