Cada Geek de Linux necesita saber Sed y Awk. Este es el por qué…

Cada Geek de Linux necesita saber Sed y Awk. Este es el por qué… / Linux

Dos de las utilidades de Linux menos apreciadas criminalmente son Sed y Awk. Si bien es cierto que pueden parecer un poco arcanos, si alguna vez tiene que realizar cambios repetitivos en grandes partes de código o texto, o si alguna vez tiene que analizar un texto, Sed y Awk son invaluables..

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

Que es sed?

Sed fue desarrollado en 1971 en Bell Labs, por el legendario pionero de la computación Lee E. McMahon..

El nombre significa editor de flujo, y eso es un poco lo que hace. Te permite editar cuerpos o flujos de texto. programáticamente, A través de un lenguaje de programación completo y compacto, pero a la vez Turing..

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

Por ejemplo, si alguien escribiera un script de Sed que reemplazara la palabra “cerveza” con “soda”, y luego se pasa en un archivo de texto que contiene la letra completa de “99 botellas de cerveza en la pared”, Pasaría por ese archivo línea por línea e imprimirá “99 botellas de soda en la pared”, y así.

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

echo "hola mundo" | sed s / world / Dave

También puede combinar las instrucciones Sed en archivos, si necesita realizar una edición más complicada. Inspirado por este hilarante hilo de Reddit, voy a tomar la letra de A-Ha's Toma en mi, 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 mejores razones para darle una oportunidad al editor de texto Vim Durante años, he probado un editor de texto después otro. Nómbralo, lo probé. Utilicé a todos y cada uno de estos editores durante más de dos meses como mi principal editor diario. De alguna manera, yo ... Leer más, pero Nano nano vs. vim: Terminal Text Editors Comparado entre nano y vim: editores de texto de Terminal Comparado Aunque Linux se ha vuelto lo suficientemente fácil como para que casi cualquier persona lo use sin tener que usar el Terminal, algunos de nosotros lo usamos regularmente o tenemos curiosidad acerca de cómo se puede controlar ... Leer más y Gedit gedit: uno 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 los editores de texto sin formato, lo primero que puede aparecer tu cabeza es la aplicación del Bloc de notas de Windows. Hace exactamente lo que su estados de la descripción del trabajo: características simples para un texto sin formato ... Leer más son opciones excelentes, y agregue las siguientes líneas. Asegúrate de que el archivo que crees termina con .sed.

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

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 Sed en un script y luego ejecutarlas con un solo comando.

Entonces, tenemos que invocar el archivo. Para ello, ejecutamos este comando..

gato tom.txt | sed -f greg.sed

Bajemos la velocidad y veamos lo que esto hace. Los lectores de ojos de águila habrán notado que estamos no utilizando eco aquí. Estamos usando el gato. 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 a abrir 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. Tomaremos las letras de las canciones antes mencionadas, pero usaremos expresiones regulares para imprimir cada línea que no hace Empezar con “Tomar”.

gato tom.txt | sed / ^ Toma / d

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

Que es awk?

Awk, como Sed, es un lenguaje de programación diseñado para tratar con grandes cuerpos de texto. Pero mientras que Sed se utiliza para procesar y modificar texto, Awk se utiliza principalmente como una herramienta para análisis y reportando.

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

Awk funciona leyendo un archivo de texto o un flujo de entrada de una línea a la vez. 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 idiomas completamente diferentes, con dos filosofías de diseño completamente diferentes. Awk se asemeja más a algunos lenguajes de propósito 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 gran trabajo en 2 años Puede llevar años de trabajo dedicado conviértete en un programador verdaderamente bueno; Entonces, ¿hay una manera de elegir el idioma correcto para comenzar a partir de hoy, para ser contratado mañana? Leer más, como C, Python y Bash. Tiene funciones como funciones y un enfoque más parecido 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, estaré cubriendo los aspectos básicos de las funciones, valores de retorno, bucles y condicionales. Asegúrese de haber leído la parte 1 antes de abordar esto, donde expliqué ... Leer más). En pocas palabras, se siente más como un lenguaje de programación.

Por lo tanto, vamos a probarlo. Usando las letras de Take On Me, vamos a imprimir todas las líneas que tienen más de 20 caracteres..

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

El siguiente ejemplo he descaradamente Cribbed de 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 las cosas como la iteración y las variables. Primero, crea un archivo llamado “WordCount.awk”, y agrega las siguientes lineas.

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

Guárdalo y luego ejecútalo con el siguiente comando.

awk -f WordCount.awk tom.txt


Genial, ¿verdad? Probablemente te darás cuenta de que no están en ningún tipo de orden. Tú puede ordena los resultados usando la utilidad de clasificació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. Puedes hacer esto usando las tuberías de Unix. Esos son los “|” 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 despojar todas las líneas que comienzan con “Tomar”. Juntos, todo se ve así:

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

Y produce esto:

Ahora vamos a darle la vuelta a eso. Comenzaremos por eliminar todas las líneas que comienzan con Tomar, y luego canalizarlas a Awk, donde contaremos cuántas veces aparecerá cada palabra. Se ve un poco así:

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

El poder de Sed y Awk

Hay tanto que puedes explicar en un solo artículo. Pero espero haber ilustrado cuán inmensamente poderosos son Sed y Awk. En pocas palabras, son una potencia de procesamiento de texto.

¿Así que, por que deberías preocuparte? Bueno, además del hecho de que nunca se sabe cuándo es necesario realizar cambios predecibles y repetitivos en un documento de texto, Sed y Awk son excelentes para analizar archivos de registro. Esto es especialmente útil cuando está intentando depurar un problema en su servidor LAMP. ¿Se suscribió para el alojamiento web solo para SSH? No se preocupe: instale fácilmente cualquier software web ¿Se suscribió a un alojamiento web solo para 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. Lea más, o consulte 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 consideren que son subestimadas? Déjame saber en los comentarios a continuación, y charlaremos..

Explorar más sobre: ​​Terminal, Editor de texto.