Hemos discutido algunas de las opciones del comando SED en el comando Sed en Linux/Unix con ejemplos
SED se utiliza para la búsqueda, el filtrado, la sustitución de texto, el reemplazo y las manipulaciones de texto como la inserción, la búsqueda de eliminación, etc. Es una de las potentes utilidades que ofrecen los sistemas Linux/Unix. Podemos usar sed con expresiones regulares. Espero que al menos tengas los conocimientos básicos sobre las expresiones regulares de Linux.
Proporciona una edición no interactiva de los archivos de texto por lo que se utiliza para automatizar la edición y tiene dos buffers – buffer de patrones y buffer de retención. Sed utiliza el buffer Patter cuando lee archivos, línea por línea y esa línea leída actualmente se inserta en el buffer de patrones mientras que el buffer de retención es un almacenamiento a largo plazo, captura la información, la almacena y la reutiliza cuando se necesita. Inicialmente, ambos están vacíos. El comando SED se utiliza para realizar diferentes operaciones sin ni siquiera abrir el archivo.
sed sintaxis general –
sed OPTIONS…
Primero cree un archivo a.txt en el que voy a realizar la operación para los comandos SED. En este blog, he utilizado el archivo «a.txt» para explicar todos los ejemplos. El blog será demasiado largo si escribo la salida de cada comando sed. Por lo tanto, usted puede referirse al mismo archivo para practicar todos los comandos inicialmente.
# cat a.txtlife isn't meant to be easy, life is meant to be lived.Try to learn & understand something new everyday in life.Respect everyone & most important love everyone.Don’t hesitate to ask for love & don’t hesitate to show love too.Life is too short to be shy.In life experience will help you differentiating right from wrong.
# Comencemos con el espaciado del archivo
1 – Inserte una línea en blanco después de cada línea –
# sed G a.txt
2 – Insertar dos líneas en blanco –
# sed 'G;G' a.txt
3 – Eliminar las líneas en blanco e insertar una línea en blanco después de cada línea –
# sed '/^$/d;G' a.txt
4 – Insertar una línea negra encima de cada línea que coincida con «love» –
# sed '/love/{x;p;x;}' a.txt
5 – Insertar una línea en blanco debajo de cada línea que coincida con «love» –
# sed '/love/G' a.txt
6 – Insertar 5 espacios a la izquierda de cada línea –
# sed 's/^/ /' a.txt
# Numeración de líneas
1 – Numerar cada línea de un archivo (alineación izquierda). **=** se utiliza para numerar la línea. \t se utiliza para el tabulador entre el número y la frase –
# sed = a.txt | sed 'N;s/\n/\t/'
2 – Numerar cada línea de un archivo (número a la izquierda, alineado a la derecha). Este comando es similar a `cat -n nombre de archivo`.
# sed = a.txt | sed 'N; s/^/ /; s/ *\(.\{4,\}\)\n/\1 /'
3 – Numerar cada línea de un archivo, sólo si la línea no está en blanco –
# sed '/./=' a.txt | sed '/./N; s/\n/ /'
# Borrar líneas
1 – Borrar una línea en particular –
Sintaxis: sed ‘nd’ filename
Ejemplo :
# sed '5d' a.txt
2 – Borrar la última línea
Sintaxis: sed ‘$d’ filename
3 – Borrar la línea del rango x al y
Sintaxis: sed ‘x,yd’ filename
Ejemplo :
# sed '3,5d' a.txt
4 – Borrar de la enésima a la última línea
Sintaxis: sed ‘nth,$d’ filename
Ejemplo :
# sed '2,$d' a.txt
5 – Borrar la línea que coincide con el patrón –
Sintaxis: sed ‘/patrón/d’ filename
Ejemplo :
# sed '/life/d' a.txt
6 – Eliminar las líneas a partir de la nª línea y cada 2ª línea a partir de ahí –
Sintaxis: sed ‘n~2d’ filename
Ejemplo :
# sed '3~2d' a.txt
7 – Borrar las líneas que coinciden con el patrón y 2 líneas después de eso –
Sintaxis: sed ‘/patrón/,+2d’ filename
Ejemplo :
# sed '/easy/,+2d' a.txt
8 – Borrar las líneas en blanco
# sed '/^$/d' a.txt
9 – Borrar las líneas vacías o que empiezan por «#» –
# sed -i '/^#/d;/^$/d' a.txt
# Ver/Imprimir los archivos
Si queremos ver el contenido del archivo, entonces usamos el comando cat y si queremos ver el contenido inferior y superior de cualquier archivo, usamos herramientas como head y tail. ¿Pero qué pasa si necesitamos ver una sección particular en el medio de cualquier archivo? Aquí discutiremos, cómo usar el comando SED para ver una sección de cualquier archivo.
1 – Ver un archivo desde el rango x al y –
Sintaxis: sed -n ‘x,yp’ filename
Ejemplo :
# sed -n '2,5p' a.txt
2 – Ver todo el archivo excepto el rango dado –
Sintaxis: sed ‘x,yd’ filename
Ejemplo :
# sed '2,4d' a.txt
3 – Imprimir la enésima línea del fichero –
Sintaxis: sed -n ‘dirección’p nombrefichero
Ejemplo :
# sed -n '4'p a.txt
4 – Imprimir las líneas desde la x hasta la y.
Sintaxis: sed -n ‘x,y’p filename
Ejemplo :
# sed -n '4,6'p a.txt
5 – Imprimir sólo la última línea –
Sintaxis: sed -n ‘
# sed -n '3,$'p a.txt
Impresión de patrones
7 – Imprime sólo la línea que coincide con el patrón –
Sintaxis: sed -n /pattern/p filename
Ejemplo :
# sed -n /every/p a.txt
8 – Imprime las líneas que coinciden con el patrón i.e desde la entrada hasta la xª línea.
Sintaxis: sed -n ‘/patrón/,xp’ filename
Ejemplo :
# sed -n '/everyone/,5p' a.txt
A continuación imprime las líneas que coinciden con el patrón, la 3ª línea coincide con el patrón «everyone», por lo que imprime desde la 3ª línea hasta la 5ª. Utilice $ en lugar de 5, si desea imprimir el archivo hasta el final.
9 – Imprime las líneas desde la xª línea de la entrada, hasta la línea que coincide con el patrón. Si el patrón no se encuentra entonces imprime hasta el final del archivo.
Sintaxis: sed -n ‘x,/patrón/p’ nombre de archivo
Ejemplo :
sed -n '1,/everyone/p' a.txt
10 – Imprime las líneas que coinciden con el patrón hasta las siguientes x líneas –
Sintaxis: sed -n ‘/patrón/,+xp’ nombre de archivo
Ejemplo :
sed -n '/learn/,+2p' a.txt
# Reemplazo con el comando sed
1 – Cambiar la primera ocurrencia del patrón –
# sed 's/life/leaves/' a.txt
2 – Reemplazar la enésima ocurrencia de un patrón en una línea –
Sintaxis: sed ‘s/patrón_viejo/nuevo_patrón/n’ nombre_de_archivo
Ejemplo :
# sed 's/to/two/2' a.txt
Escribimos «2» porque reemplazamos la segunda ocurrencia. Del mismo modo se puede utilizar 3, 4 etc según la necesidad.
3 – Reemplazar todas las ocurrencias del patrón en una línea.
# sed 's/life/learn/g' a.txt
4 – Reemplazar el patrón desde la enésima ocurrencia a todas las ocurrencias en una línea.
Sintaxis: sed ‘s/patrón_antiguo/nuevo_patrón/ng’ filename
Ejemplo :
# sed 's/to/TWO/2g' a.txt
Nota – Este comando sed reemplaza la segunda, tercera, etc ocurrencias del patrón «to» por «TWO» en una línea.
Si desea imprimir sólo las líneas reemplazadas, entonces use la opción «-n» junto con la bandera de impresión «/p» para mostrar sólo las líneas reemplazadas –
# sed -n 's/to/TWO/p' a.txt
Y si desea imprimir las líneas reemplazadas dos veces, entonces sólo use la bandera de impresión «/p» sin la opción «-n» –
# sed 's/to/TWO/p' a.txt
5 – Reemplazar el patrón en un número de línea específico. Aquí, «m» es el número de línea.
Sintaxis: sed ‘m s/patrón_viejo/patrón_nuevo/’ nombre_archivo
Ejemplo :
# sed '3 s/every/each/' a.txt
Si desea imprimir sólo las líneas reemplazadas –
# sed -n '3 s/every/each/p' a.txt
6 – Reemplazar cadena en un rango de líneas definido –
Sintaxis: sed ‘x,y s/patrón_antiguo/nuevo_patrón/’ nombre_del_archivo
donde,
x = número de línea inicial
y y = número de línea final
Ejemplo :
# sed '2,5 s/to/TWO/' a.txt
Nota – Se puede utilizar $ en lugar de «y» si deseamos cambiar el patrón hasta la última línea del archivo.
Ejemplo :
# sed '2,$ s/to/TWO/' a.txt
7 – Si se desea reemplazar el patrón para ignorar las mayúsculas y minúsculas, hay dos formas de reemplazar dichos patrones –
Frist, Usando la bandera de impresión «/i» –
Sintaxis: sed ‘s/patrón_viejo/nuevo_patrón/i’ nombre_archivo
Ejemplo :
# sed 's/life/Love/i' a.txt
Segundo, Usando expresiones regulares –
# sed 's/ife/Love/g' a.txt
8 – Para reemplazar múltiples espacios con un solo espacio –
# sed 's/ */ /g' filename
9 – Reemplazar un patrón seguido por el otro patrón –
Sintaxis: sed ‘/patrón_seguido/ s/patrón_viejo/patrón_nuevo/’ nombre_de_archivo
Ejemplo :
# sed '/is/ s/live/love/' a.txt
10 – Reemplazar un patrón por otro excepto en la enésima línea.
Sintaxis: sed ‘n!s/patrón_antiguo/patrón_nuevo/’ nombre_de_archivo
Ejemplo :
# sed -i '5!s/life/love/' a.txt
p nombre de archivo
6 – Imprimir desde la enésima línea hasta el final del archivo –
Sintaxis: sed -n ‘n,$p’ nombre de archivo
Ejemplo :
# sed -n '3,$'p a.txt
Pattern Printing
7 – Print the line only which matches the pattern –
Syntax: sed -n /pattern/p filename
Example :
# sed -n /every/p a.txt
8 – Print lines which matches the pattern i.e from input to xth line.
Syntax: sed -n ‘/pattern/,xp’ filename
Example :
# sed -n '/everyone/,5p' a.txt
Following prints lines which matches the pattern, 3rd line matches the pattern «everyone”, so it prints from 3rd line to 5th line. Use $ in place of 5, if want to print the file till end.
9 – Prints lines from the xth line of the input, up-to the line which matches the pattern. If the pattern doesn’t found then it prints up-to end of the file.
Syntax: sed -n ‘x,/pattern/p’ filename
Example :
sed -n '1,/everyone/p' a.txt
10 – Print the lines which matches the pattern up-to the next xth lines –
Syntax: sed -n ‘/pattern/,+xp’ filename
Example :
sed -n '/learn/,+2p' a.txt
# Replacement with the sed command
1 – Change the first occurrence of the pattern –
# sed 's/life/leaves/' a.txt
2 – Replacing the nth occurrence of a pattern in a line –
Syntax: sed ‘s/old_pattern/new_pattern/n’ filename
Example :
# sed 's/to/two/2' a.txt
We wrote «2” because we replaces the second occurrence. Likewise you can use 3, 4 etc according to need.
3 – Replacing all the occurrence of the pattern in a line.
# sed 's/life/learn/g' a.txt
4 – Replace pattern from nth occurrence to all occurrences in a line.
Syntax: sed ‘s/old_pattern/new_pattern/ng’ filename
Example :
# sed 's/to/TWO/2g' a.txt
Note – This sed command replaces the second, third, etc occurrences of pattern «to” with «TWO” in a line.
If you wish to print only the replaced lines, then use «-n” option along with «/p” print flag to display only the replaced lines –
# sed -n 's/to/TWO/p' a.txt
And if you wish to print the replaced lines twice, then only use «/p” print flag without «-n” option-
# sed 's/to/TWO/p' a.txt
5 – Replacing pattern on a specific line number. Here, «m” is the line number.
Syntax: sed ‘m s/old_pattern/new_pattern/’ filename
Example :
# sed '3 s/every/each/' a.txt
If you wish to print only the replaced lines –
# sed -n '3 s/every/each/p' a.txt
6 – Replace string on a defined range of lines –
Syntax: sed ‘x,y s/old_pattern/new_pattern/’ filename
where,
x = starting line number
and y = ending line number
Example :
# sed '2,5 s/to/TWO/' a.txt
Note – $ can be used in place of «y” if we wish to change the pattern up-to last line in the file.
Example :
# sed '2,$ s/to/TWO/' a.txt
7 – If you wish to replace pattern in order to ignore character case (beginning with uppercase or lowercase), then there are two ways to replace such patterns –
Frist, By using «/i” print flag –
Syntax: sed ‘s/old_pattern/new_pattern/i’ filename
Example :
# sed 's/life/Love/i' a.txt
Second, By using regular expressions –
# sed 's/ife/Love/g' a.txt
8 – To replace multiple spaces with a single space –
# sed 's/ */ /g' filename
9 – Replace one pattern followed by the another pattern –
Syntax: sed ‘/followed_pattern/ s/old_pattern/new_pattern/’ filename
Example :
# sed '/is/ s/live/love/' a.txt
10 – Replace a pattern with other except in the nth line.
Syntax: sed ‘n!s/old_pattern/new_pattern/’ filename
Example :
# sed -i '5!s/life/love/' a.txt
0 comentarios