Introducción
- 3215
- 446
- Mario Gollum
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 \ | 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' \ \ | Eliminar todas las líneas en blanco de finales |
sed -e: a -e '/\\ $/n; s/\\\ n //; ta '\ | 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 |/; | 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] \+\) \\ | 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; \ | Reemplace solo entre "desde" y "hasta" |
sed '/EndNotes:/, $ S/Schaff/Herzog/G; \ | 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;\ | 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 \\ | 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 \ | Un reemplazo de revoluciones |
SED 10Q Archivo.TXT | Un reemplazo de la cabeza |
sed -e: a -e '$ q; n; 11, $ d; ba' \ | Un reemplazo de cola |
sed '$!NORTE; /^\ (.*\) \ n \ 1 $/!PAG; D' \ | Un reemplazo de uniq |
sed '$!NORTE; s/^\ (.*\) \ n \ 1 $/\ 1/; \ | 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;'\ | 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 '\ \ | 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 \ | Autoexplicativo |
sed -e '/^$/,/^end/s/Hills/\ | 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@\ ([^:]*\): \ ((^:]*\): \ ((^:]*\ | Orden inverso de elementos en la última línea de ruta.TXT |
sed -n -e '/regexp/=; x; 1!p; g; $!N; p; d; '\ | 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 \ $/\ | Alinear el texto enanja a la derecha |
sed -e: a -e 's/^.\ 1,77 \ $/ &/; ta '-e \ | 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