Introducción

Introducción

Bienvenido a la segunda parte de nuestra serie, una parte que se centrará en SED, la versión GNU. Como verá, hay varias variantes de SED, que están disponibles para bastantes plataformas, pero nos centraremos en las versiones de GNU SED 4.X. Muchos de ustedes ya han oído hablar de SED y ya lo usaron, principalmente como una herramienta de sustitución. Pero eso es solo un segmento de lo que SED puede hacer, y haremos todo lo posible para mostrarle lo más posible de lo que puede hacer con él. El nombre representa el editor de transmisión, y aquí "stream" puede ser un archivo, una tubería o simplemente stdin. Esperamos que tenga conocimiento básico de Linux y si ya trabajó con expresiones regulares o al menos sabe qué es un regexp, mejor. No tenemos el espacio para un tutorial completo sobre expresiones regulares, por lo que en su lugar solo le daremos una idea básica y muchos ejemplos SED. Hay muchos documentos que tratan con el tema, e incluso tendremos algunas recomendaciones, como verá en un minuto.

Instalación

No hay mucho que decir aquí, porque es probable que ya haya instalado SED, porque se usa en varios scripts del sistema y una herramienta invaluable en la vida de un usuario de Linux que quiere ser eficiente. Puede probar la versión que tiene escribiendo

 $ sed -versión

En mi sistema, este comando me dice que tengo gnu sed 4.2.1 Instalado, más enlaces a la página de inicio y otras cosas útiles. El paquete se llama simplemente 'sed' independientemente de la distribución, pero si Gentoo ofrece SED implícitamente, creo que eso significa que puede estar seguro de.

Conceptos

Antes de ir más allá, sentimos que es importante señalar qué Exactamente es lo que SED lo hace, porque el "editor de transmisión" puede no sonar demasiadas campanas. SED toma el texto de entrada, ¿las operaciones especificadas en cada línea (a menos que se especifique lo contrario) e imprima el texto modificado?. Las operaciones especificadas pueden admitir, insertar, eliminar o sustituir. Esto no es tan simple como puede verse: tenga en cuenta que hay muchas opciones y combinaciones que pueden hacer que un comando SED sea bastante difícil de digerir. Entonces, si desea usar SED, le recomendamos que aprenda los conceptos básicos de las reglas, y puede ver el resto a medida que avanza. Antes de comenzar el tutorial, queremos agradecer a Eric Pement y a otros por su inspiración y por lo que ha hecho por todos los que quieren aprender y usar SED.



Expresiones regulares

Como los comandos/guiones de SED tienden a volverse crípticos, creemos que nuestros lectores deben comprender los conceptos básicos en lugar de copiar y pegar ciegamente los comandos que no conocen el significado de. Cuando uno quiere entender qué es un regexp, la palabra clave es "coincidir". O incluso mejor, "coincidencia de patrones". Por ejemplo, en un informe para su departamento de recursos humanos, escribió el nombre de Nick al referirse al arquitecto de la red. Pero Nick siguió adelante y John vino a tomar su lugar, así que ahora tienes que reemplazar la palabra Nick con John. Si el archivo se llama informe.txt, podrías hacer

 Informe de $ Cat.txt | sed 's/nick/John/g'> report_new.TXT

Por defecto, SED usa stdout, por lo que es posible que desee usar el operador de redirección de su shell, como en nuestro ejemplo a continuación. Este es un ejemplo muy simple, pero ilustramos algunos puntos: coincidimos con el patrón "Nick" y sustituimos todas las instancias con "John". Tenga en cuenta que SED es sensible a la caja, así que tenga cuidado y verifique su archivo de salida para ver si se realizaron todas las sustituciones. Lo anterior podría haber sido escrito también así:

 Informe de $ Sed 'S/Nick/John/G'.txt> report_new.TXT

Ok, pero ¿dónde están las expresiones regulares?? Bueno, primero queríamos mojarte los pies con el concepto de coincidencia y aquí viene la parte interesante.

Si no está seguro de si escribió "Nick" por error en lugar de "Nick" y quiere igualar eso también, podría usar Sed 'S/Nick | Nick/John/G'. La barra vertical tiene el mismo significado que puede saber si usó C, es decir, su expresión coincidirá con Nick o mella. Como verá, la tubería también se puede usar de otras maneras, pero su significado permanecerá. Otros operadores ampliamente utilizados en regexps son '?', que coinciden cero o una instancia del elemento anterior (Flavou?r coincidirá con el sabor y el sabor), '*' significa cero o más y '+' coincide con uno o más elementos. '^' coincide con el inicio de la cadena, mientras que '$' hace lo contrario. Si eres un usuario de VI (M), algunas de estas cosas pueden parecer familiares. Después de todo, estas utilidades, junto con AWK o C tienen sus raíces en los primeros días de Unix. No insistiremos más en el tema, ya que las cosas se volverán más simples leyendo ejemplos, pero lo que debe saber es que hay varias implementaciones de reglas: POSIX, POSIX extendido, perl o varias implementaciones de expresiones regulares difusas, garantizadas para dar eres un dolor de cabeza.



Ejemplos SED

Aprender el comando de Linux SED con ejemplos
Sintaxis del comando de Linux Descripción del comando de Linux
Informe Sed 'S/Nick/John/G'.TXT
Reemplace cada aparición de Nick con John en el informe.TXT
SED 'S/Nick | Nick/John/G' Informe.TXT
Reemplace cada aparición de Nick o Nick con John.
Sed 's/^//' archivo.txt> file_new.TXT
Agregue 8 espacios a la izquierda de un texto para una impresión bonita.
Sed -n '/por supuesto/,/Atention You \
Pagar/P 'myfile

Muestra solo un párrafo, comenzando con "Por supuesto"

y terminando en "Atención que prestas"

SED -N 12,18P Archivo.TXT
Mostrar solo las líneas 12-18 del archivo.TXT
SED 12,18D Archivo.TXT
Mostrar todo el archivo.txt excepto por líneas de 12 a 18
Archivo SED G.TXT 
Archivo de doble espacio.TXT
SED -F Script.archivo SED.TXT
Escribe todos los comandos en el script.sed y ejecutarlos
sed '5!archivo s/jamón/queso/'.TXT
Reemplace el jamón con queso en el archivo.txt excepto en la quinta línea
archivo sed '$ d'.TXT
Eliminar la última línea
sed '/[0-9] \ 3 \/p'.TXT
Imprima solo líneas con tres dígitos consecutivos
sed '/boom/!archivo s/aaa/bb/'.TXT
A menos que se encuentre el auge, reemplace AAA con BB
Sed '17,/disco/d 'archivo.TXT
Elimine todas las líneas de la línea 17 al 'disco'
echo uno dos | sed "S/One/Unos/I"

Reemplaza uno con UNOS de manera insensible,

Entonces imprimirá "UNOS Two"

archivo sed 'g; g'.TXT
Triple espacio de un archivo
Sed 's/.archivo $ // '.TXT
Una forma de reemplazar DOS2UNIX 🙂
sed 's/ ^[ ^t]*//' archivo.TXT
Eliminar todos los espacios frente a cada línea de archivo.TXT
sed 's/[ ^t]*$ //' archivo.TXT
Eliminar todos los espacios al final de cada línea de archivo.TXT
Sed 's/ ^[ ^t]*//; s/[ ^]*$ //' archivo.TXT

Elimine todos los espacios al frente y al final de cada línea

de archivo.TXT

Sed 's/foo/bar/' archivo.TXT
Reemplace Foo con barra solo para la primera instancia en una línea.
Sed 's/foo/bar/4' archivo.TXT
Reemplace Foo con barra solo para la cuarta instancia en una línea.
archivo sed 's/foo/bar/g'.TXT 
Reemplace Foo con barra para todas las instancias en una línea.
Sed '/baz/s/foo/bar/g'.TXT
Solo si la línea contiene Baz, sustituya a Foo con barra
sed '/./,/^$/!D 'Archivo.TXT
Eliminar todas las líneas en blanco consecutivas excepto EOF
Sed '/^$/n;/\ n $/d'.TXT

Eliminar todas las líneas en blanco consecutivas, pero permite

Solo la línea en blanco superior

sed '/.ps!D 'Archivo.TXT
Eliminar todas las líneas en blanco líderes
sed -e: a -e '/^\ n*$/$ d; n;;/\ n $/ba' \ \
archivo.TXT
Eliminar todas las líneas en blanco de finales
sed -e: a -e '/\\ $/n; s/\\\ n //; ta '\
archivo.TXT

Si un archivo termina en una barra inalcadora, únase a él con el siguiente (útil

para scripts de shell)

sed '/regex/,+5/expr/'
Match regex más las siguientes 5 líneas
archivo sed '1 ~ 3d'.TXT
Elimine cada tercera línea, comenzando con la primera
SED -N '2 ~ 5P' Archivo.TXT
Imprima cada quinta línea comenzando con la segunda
Sed 's/[nn] ick/John/g' Informe.TXT

Otra forma de escribir algún ejemplo anterior.

Puedes adivinar cuál?

sed -n '/re/p; q;' archivo.TXT

Imprima solo el primer partido de

Re (expresión regular)

sed '0,/re/// d;' archivo.TXT
Eliminar solo el primer partido
sed '0,/re/s // to_that/' archivo.TXT
Cambiar solo el primer partido
Sed 's/^[^,]*,/9999,/' archivo.CSV
Cambiar el primer campo a 9999 en un archivo CSV
S/^ *\ (.*[^] \) *$/| \ 1 |/;
s/" *, */" |/g;
: bucle
S/| *\ ((^", |] [^, |] *\) *, */| \ 1 |/g;
S/| *, */| \ 1 |/g;
T Loop
s/ *|/|/g;
S/| */|/g;
s/^| \ (.*\) | $/\ 1/;

SED Script para convertir el archivo CSV en barra separada

(Funciona solo en algunos tipos de CSV,

con incrustado "S y comas)

sed ': a; s/\ (^\ | [^0-9.] \) \ ([0-9] \+\) \\
([0-9] \ 3 \ \)/\ 1 \ 2, \ 3/g; archivo TA '.TXT
Cambiar números del archivo.txt de 1234.56 forma a 1.234.56
sed -r "s/\<(reg|exp)[a-z]+/\U&/g"
Convierta cualquier palabra que comience con REG o EXP a mayúsculas
SED '1,20 S/Johnson/White/G'.TXT

Reemplazar a Johnson con blanco solo en

líneas entre 1 y 20

sed '1,20 !Archivo S/Johnson/White/G '.TXT
Lo anterior invertido (coincida con todas las líneas excepto 1-20)
sed '/from/,/to/s/\/magenta/g; \
s/\/cyan/g; ' archivo.TXT
Reemplace solo entre "desde" y "hasta"
sed '/EndNotes:/, $ S/Schaff/Herzog/G; \
S/Kraft/Ebbing/G; ' archivo.TXT
Reemplace solo desde la palabra "EndNotes:" hasta que EOF
sed '/./H; $!d;; x;/regex/!D 'Archivo.TXT
Imprimir párrafos solo si contienen regex
 sed -e '/./H; $!d; '-e' x;/RE1/!d;\
/RE2/!d;/RE3/!D 'Archivo.TXT

Imprimir párrafos solo si contienen RE1,

RE2 y RE3

 sed ': a; /\\ $/n; s/\\\ n //; TA 'Archivo.TXT

Unirse a dos líneas en los primeros extremos en una barra insegura

 Sed 's/14 "/catorce pulgadas/g'.TXT

Así es como puedes usar cotizaciones dobles

 sed 's/\/some \/unix \/path/\/a \/new \\
/PATH/G 'FILE.TXT

Trabajando con rutas de Unix

 Sed 's/[a-g] // g' archivo.TXT

Eliminar todos los caracteres de A a G del archivo.TXT

sed 's/\ (.*\) foo/\ 1bar/'archivo.TXT
Reemplace solo el último partido de Foo con barra
sed '1!G; h; $!d' 
Un reemplazo de TAC
sed '/\ n/!G; s/\ (.\) \ (.*\ n \)/& \ 2 \ 1 \
/; // d; S/.// '
Un reemplazo de revoluciones
SED 10Q Archivo.TXT
Un reemplazo de la cabeza
sed -e: a -e '$ q; n; 11, $ d; ba' \
archivo.TXT
Un reemplazo de cola
sed '$!NORTE; /^\ (.*\) \ n \ 1 $/!PAG; D' \
archivo.TXT
Un reemplazo de uniq
sed '$!NORTE; s/^\ (.*\) \ n \ 1 $/\ 1/; \
t; D 'Archivo.TXT
Lo contrario (o uniq -d equivalente)
sed '$!N; $!D 'Archivo.TXT
Equivalente a la cola -n 2
archivo sed -n '$ P'.TXT
... cola -n 1 (o cola -1)
sed '/regexp/!D 'Archivo.TXT
GREP equivalente
sed -n '/regexp/g; 1!p;; h 'archivo.TXT

Imprima la línea antes de una regexp coincidente, pero

no el que contiene el regexp

SED -N '/REGEXP/n; P;'.TXT
Imprima la línea después de que el que coincida con el regexp, pero

no el que contiene el regexp

archivo sed '/patrón/d'.TXT
Eliminar el patrón de coincidencia de líneas
sed '/./!D 'Archivo.TXT
Eliminar todas las líneas en blanco de un archivo
sed '/^$/n;/\ n $/n; // d' archivo.TXT

Eliminar todas las líneas en blanco consecutivas

Excepto por los dos primeros

sed -n '/^$/p; h;;/./X;/./pag;'\
archivo.TXT
Elimine la última línea de cada párrafo
Sed 's/.\ x08 // g 'archivo
Eliminar los superpuestos de Nroff
sed '/^$/q'
Obtenga el encabezado de correo
sed '1,/^$/d'
Obtener cuerpo de correo
sed '/^sujeto: */!d; S ///; Q '
Obtener asunto de correo
sed 's/^/>/'

Cita el mensaje de correo insertando un

">" Frente a cada línea

sed 's/^> //'
El opuesto (mensaje de correo no cuotado)
sed -e: a -e 's/]*> // g;/ 
Eliminar etiquetas HTML
sed '/./H; d;; x; s/\ n/= nl =/g '\ \
archivo.txt | clasificar \
| sed '1s/= nl = //; s/= nl =/\ n/g'
Ordenar párrafos del archivo.txt alfabéticamente
sed 's@/usr/bin@&/local@g' ruta.TXT
Reemplazar/usr/bin con/usr/bin/local en ruta.TXT
Sed 's@^.ps<<>> @g 'ruta.TXT
Pruébalo y mira 🙂
sed 's/\ (\/[^:]*\).*/\ 1/g 'ruta.TXT

Camino proporcionado.txt contiene $ ruta, esto lo hará

hacer eco solo la primera ruta en cada línea

sed 's/\ ([^:]*\).*/\ 1/'/etc/passwd

Reemplazo de AWK: muestra solo a los usuarios

Desde el archivo PASSWD

Echo "Bienvenido al Geek Stuff" | sed \
's/\ (\ b [a-z] \)/\ (\ 1 \)/g'
(W) Elección (t) o (t) he (g) eek (s) tuff
Autoexplicativo
sed -e '/^$/,/^end/s/Hills/\
Archivo de montañas/g '.TXT

Intercambiar 'colinas' por 'montañas', pero solo en bloques

de texto de texto

con una línea en blanco, y terminando con una línea comenzando

con los tres personajes 'End', inclusive

sed -e '/^#/d'/etc/Services | más
Ver el archivo de servicios sin las líneas comentadas
sed '$ s@\ ([^:]*\): \ ((^:]*\): \ ((^:]*\
\)@\ 3: \ 2: \ 1@g 'ruta.TXT
Orden inverso de elementos en la última línea de ruta.TXT
sed -n -e '/regexp/=; x; 1!p; g; $!N; p; d; '\
-archivo E H.TXT

Imprima 1 línea de contexto antes y después de la coincidencia de la línea,

con un número de línea donde ocurre la coincidencia

sed '/regex/x; p; x;'.TXT
Inserte una nueva línea sobre cada línea de reglas de línea Regex
sed '/aaa/!d; /BBB/!d; /CCC/!D 'Archivo.TXT
Coincidir con AAA, BBB y CCC en cualquier orden
sed '/aaa.*BBB.*CCC/!D 'Archivo.TXT
Coincidir con AAA, BBB y CCC en ese orden
sed -n '/^.Archivo \ 65 \/p '.TXT
Líneas de impresión de 65 caracteres de largo o más
sed -n '/^.\sesenta y cinco\/!archivo p '.TXT
Imprimir líneas de 65 caracteres de largo o menos
archivo sed '/regex/g'.TXT
Inserte una línea en blanco debajo de cada línea
sed '/regex/x; p; x; g;' archivo.TXT
Inserte una línea en blanco arriba y abajo
sed = archivo.txt | sed 'n; s/\ n/\ t/'
Número de líneas en el archivo.TXT
sed -e: a -e 's/^.\ 1,78 \ $/\
&/; TA 'archivo.TXT
Alinear el texto enanja a la derecha
sed -e: a -e 's/^.\ 1,77 \ $/ &/; ta '-e \
's/\ ( *\) \ 1/\ 1/'.TXT
Alinear el centro de texto

Conclusión

Esto es solo una parte de lo que se puede contar sobre SED, pero esta serie se entiende como una guía práctica, por lo que esperamos que le ayude a descubrir el poder de las herramientas Unix y ser más eficiente en su trabajo.

Tutoriales de Linux relacionados:

  • Cosas para instalar en Ubuntu 20.04
  • Cosas que hacer después de instalar Ubuntu 20.04 fossa focal Linux
  • Una introducción a la automatización, herramientas y técnicas de Linux
  • Mint 20: Mejor que Ubuntu y Microsoft Windows?
  • Cosas que hacer después de instalar Ubuntu 22.04 Jellyfish de Jammy ..
  • Cosas para instalar en Ubuntu 22.04
  • Escuche su estación de radio favorita con un solo comando ..
  • Sistema colgado de Linux? Cómo escapar a la línea de comando y ..
  • Ubuntu 20.04 Guía
  • Mastering Bash Script Loops