Todo geek de Linux necesita saber Sed y Awk. Este es el por qué…

  • William Charles
  • 0
  • 4258
  • 1051
Anuncio

Dos de las utilidades de Linux menos apreciadas criminalmente son Sed y Awk. Aunque es cierto que pueden parecer un poco arcanos, si alguna vez tiene que hacer cambios repetitivos en grandes fragmentos de código o texto, o si alguna vez tiene que analizar algún texto, Sed y Awk son invaluables.

Entonces, ¿qué son? ¿Cómo se usan? Y cómo, cuando se combinan, hacen que sea más fácil procesar el texto?

¿Qué es sed??

Sed fue desarrollado en 1971 en Bell Labs, por el legendario pionero de la informática Lee E. McMahon.

El nombre significa editor de flujo, y eso es lo que hace. Le permite editar cuerpos o secuencias de texto. programáticamente, a través de un lenguaje de programación compacto y simple, pero completo de Turing.

La forma en que funciona es simple: lee texto, línea por línea en un búfer. Para cada línea, realizará las instrucciones predefinidas, cuando corresponda.

Por ejemplo, si alguien escribiera un guión Sed que reemplazara la palabra “cerveza” con “soda”, y luego pasó un archivo de texto que contenía la letra completa a “99 botellas de cerveza en la pared”, iría a través de ese archivo línea por línea e imprimiría “99 botellas de refresco en la pared”, y así.

El script Sed más básico es Hello World. Aquí, utilizamos la utilidad Unix Echo, que simplemente genera cadenas, para imprimir “Hola Mundo”. Pero le enviamos esto a Sed y le decimos que reemplace “Mundo” con”Dave”. Cosas auto explicativas.

echo "Hola mundo" | sed s / mundo / Dave

También puede combinar instrucciones Sed en archivos, si necesita hacer una edición más complicada. Inspirado por este hilo hilarante de Reddit, voy a llevar la letra a A-Ha's Tomar en mí, y reemplazar cada instancia de “yo”, “Yo”, y “Mi”, con greg.

Primero, pondré la letra de la canción en un archivo de texto llamado tom.txt. Luego abriré mi editor de texto preferido (mi favorito es Vim Las 7 razones principales para darle una oportunidad al editor de texto Vim Las 7 razones principales para darle una oportunidad al editor de texto Vim Durante años, he probado un editor de texto después otro. Lo que sea, lo probé. Utilicé a todos y cada uno de estos editores durante más de dos meses como mi principal editor del día a día. De alguna manera, yo ... pero Nano nano vs. vim: Editores de texto terminal Comparado nano vs vim: Editores de texto de terminal comparados Aunque Linux se ha vuelto bastante fácil de usar para prácticamente cualquier persona sin tener que usar el Terminal, hay algunos de nosotros que lo usamos regularmente o tenemos curiosidad sobre cómo se puede controlar ... y Gedit gedit: One De los editores de texto sin formato con más funciones [Linux y Windows] gedit: uno de los editores de texto sin formato con más funciones [Linux y Windows] Cuando piensa en editores de texto sin formato, lo primero que puede aparecer en su cabeza es Windows 'Aplicación Bloc de notas. Hace exactamente lo que su descripción de trabajo st ates: las características simples para un texto simple ... son dos excelentes opciones) y agregue las siguientes líneas. Asegúrese de que el archivo que cree termine con .sed.

Puede notar que en el ejemplo anterior, me he repetido a mí mismo (por ejemplo, s / me / Greg / y s / Me / Greg /). Esto se debe a que algunas versiones de Sed, como la que se incluye con Mac OS X, funcionan no admite coincidencia entre mayúsculas y minúsculas. Como resultado, tenemos que escribir dos instrucciones Sed para cada palabra, por lo que reconoce la versión en mayúscula y no en mayúscula.

Esto no funcionará perfectamente, como si hubiera reemplazado cada instancia de “yo”, “Yo”, y “Mi” a mano. Recuerde, solo estamos usando esto como un ejercicio para demostrar cómo puede agrupar las instrucciones de Sed en un script y luego ejecutarlas con un solo comando.

Entonces, necesitamos invocar el archivo. Para hacer eso, ejecutamos este comando.

gato tom.txt | sed -f greg.sed

Reduzcamos la velocidad y veamos qué hace esto. Los lectores con ojos de águila habrán notado que estamos no usando Echo aquí. Estamos usando Cat. Esto se debe a que mientras Cat imprimirá todo el contenido del archivo, echo solo imprimirá el nombre del archivo. También habrás notado que estamos ejecutando Sed con el “-F” bandera. Esto le dice que abra el script como un archivo.

El resultado final es este.

También vale la pena señalar que Sed admite expresiones regulares (REGEX). Estos le permiten definir patrones en el texto, utilizando una sintaxis especial y complicada.

Aquí hay un ejemplo de cómo podría funcionar. Vamos a tomar las letras de las canciones antes mencionadas, pero use expresiones regulares para imprimir cada línea que no lo hace Empezar con “Tomar”.

gato tom.txt | sed / ^ Take / d

Sed es, por supuesto, increíblemente útil. Pero es aún más poderoso cuando se combina con Awk.

¿Qué es awk??

Awk, como Sed, es un lenguaje de programación diseñado para manejar grandes cuerpos de texto. Pero mientras Sed se usa para procesar y modificar texto, Awk se usa principalmente como una herramienta para análisis y informes.

Al igual que Sed, Awk se desarrolló por primera vez en Bell Labs en la década de 1970. Su nombre no proviene de lo que el programa hace, sino los apellidos de cada uno de los autores: Alfred Aho, Peter Weinberger y Brian Kernaghan.

Awk funciona leyendo un archivo de texto o una secuencia de entrada línea por línea. Cada línea se escanea para ver si coincide con un patrón predefinido. Si se encuentra una coincidencia, se realiza una acción.

Pero si bien Sed y Awk pueden compartir propósitos similares, son dos lenguajes completamente diferentes, con dos filosofías de diseño completamente diferentes. Awk se parece más a algunos lenguajes de uso general Cómo elegir un lenguaje de programación para aprender hoy y obtener un excelente trabajo en 2 años Cómo elegir un lenguaje de programación para aprender hoy y obtener un excelente trabajo en 2 años Puede llevar años de trabajo dedicado convertirse en un programador verdaderamente bueno; Entonces, ¿hay una manera de elegir el idioma correcto para comenzar hoy, para ser contratado mañana? , como C, Python y Bash. Tiene cosas como funciones y un enfoque más similar a C para cosas como la iteración y las variables (James Bruce explicó cómo funciona la iteración Los fundamentos absolutos de la programación para principiantes (Parte 2) Los fundamentos absolutos de la programación para principiantes (Parte 2) En parte 2 de nuestra guía absoluta de programación para principiantes, cubriré los conceptos básicos de funciones, valores de retorno, bucles y condicionales. Asegúrese de haber leído la parte 1 antes de abordar esto, donde expliqué el ...). En pocas palabras, se siente más como un lenguaje de programación.

Entonces, probémoslo. Usando la letra de Take On Me, vamos a imprimir todas las líneas que tengan más de 20 caracteres..

awk 'length ($ 0)> 80' tom.txt 

El siguiente ejemplo que he descaradamente basado en la documentación oficial de Awk. Pero es un gran ejemplo del potencial de este lenguaje poderoso pero pequeño. También es una gran demostración de cómo funcionan cosas como la iteración y las variables. Primero, crea un archivo llamado “WordCount.awk”, y agregue las siguientes líneas.

para (i = 1; i <= NF; i++) freq[$i]++ 
END para (palabra en frecuencia) printf "% s \ t% d \ n", palabra, frecuencia [palabra]

Guárdelo y luego ejecútelo con el siguiente comando.

awk -f WordCount.awk tom.txt


Genial, verdad? Probablemente notará que no están en ningún tipo de orden. usted poder ordenar los resultados utilizando la utilidad de ordenación Unix. Pero lo dejaremos para otro día. Vamos a mantenerlo simple.

Combinando los dos

Awk y Sed son increíblemente poderosos cuando se combinan. Puede hacer esto utilizando tuberías Unix. Esos son los “El |” bits entre comandos.

Intentemos esto: vamos a enumerar todas las líneas en Take On Me que tienen más de 20 caracteres, usando Awk. Luego, vamos a quitar todas las líneas que comienzan con “Tomar”. Juntos, todo se ve así:

awk 'length ($ 0)> 20' tom.txt | sed / ^ Take / d

Y produce esto:

Ahora volteemos eso. Comenzaremos eliminando todas las líneas que comienzan con Take y luego las canalizaremos a Awk, donde contaremos cuántas veces aparece cada palabra. Se parece un poco a esto:

gato tom.txt | sed / ^ Take / d | awk -f WordCount.awk

El poder de Sed y Awk

Solo hay mucho que puedes explicar en un solo artículo. Pero espero haber ilustrado cuán inconmensurablemente poderosos son Sed y Awk. En pocas palabras, son una fuente inagotable de procesamiento de texto..

¿Así que, por que deberías preocuparte? Bueno, además del hecho de que nunca sabes cuándo necesitas hacer cambios predecibles y repetitivos en un documento de texto, Sed y Awk son excelentes para analizar archivos de registro. Esto es especialmente útil cuando intenta depurar un problema en su servidor LAMP. ¿Se ha registrado para el alojamiento web solo SSH? No se preocupe: ¿instala fácilmente cualquier software web registrado para alojamiento web solo SSH? No se preocupe: instale fácilmente cualquier software web ¿No sabe lo primero sobre el funcionamiento de Linux a través de su potente línea de comandos? No te preocupes más. , o mirando sus registros de acceso para ver si su servidor ha sido pirateado.

¿Has encontrado un uso interesante para Sed y Awk? ¿Hay otras utilidades de Linux que consideras que son poco apreciadas? Déjame saber en los comentarios a continuación, y hablaremos.




Nadie ha comentado sobre este artículo todavía.

Sobre tecnología moderna, simple y asequible.
Tu guía en el mundo de la tecnología moderna. Aprenda a usar las tecnologías y los dispositivos que nos rodean todos los días y aprenda a descubrir cosas interesantes en Internet.