2011-10-11 27 views

Respuesta

125

Breve definición:

grep: Buscar términos específicos en un archivo

#usage 
$ grep This file.txt 
Every line containing "This" 
Every line containing "This" 
Every line containing "This" 
Every line containing "This" 

$ cat file.txt 
Every line containing "This" 
Every line containing "This" 
Every line containing "That" 
Every line containing "This" 
Every line containing "This" 

Ahora awk y sed son completamente diferentes a grep. awk y sed son procesadores de texto. No solo tienen la capacidad de encontrar lo que buscas en el texto, también tienen la capacidad de eliminar, agregar y modificar el texto (y mucho más).

awk se utiliza principalmente para la extracción de datos e informes. sed es un editor de flujo
Cada uno de ellos tiene su propia funcionalidad y especialidades.

Ejemplo
Sed

$ sed -i 's/cat/dog/' file.txt 
# this will replace any occurrence of the characters 'cat' by 'dog' 

Awk

$ awk '{print $2}' file.txt 
# this will print the second column of file.txt 

básica awk uso:
Compute suma/media/max/min/etc. lo que sea que puedas necesitar

$ cat file.txt 
A 10 
B 20 
C 60 
$ awk 'BEGIN {sum=0; count=0; OFS="\t"} {sum+=$2; count++} END {print "Average:", sum/count}' file.txt 
Average: 30 

recomiendo que lea este libro: Sed & Awk: 2nd Ed.

Se le ayudará a ser un usuario SED/awk de dominio en cualquier entorno Unix.

37

Grep es útil si desea buscar rápidamente las líneas que coinciden en un archivo. También puede devolver otra información simple como números de línea coincidentes, recuento de coincidencias y listas de nombres de archivos.

Awk es un lenguaje de programación completo basado en la lectura de archivos de estilo CSV, el procesamiento de registros y, opcionalmente, la impresión de un conjunto de datos de resultados. Puede hacer muchas cosas, pero no es la herramienta más fácil de usar para tareas simples.

Sed es útil cuando desea realizar cambios en un archivo basado en expresiones regulares. Le permite emparejar fácilmente partes de líneas, hacer modificaciones e imprimir resultados. Es menos expresivo que awk, pero eso lo hace más fácil de usar para tareas simples. Tiene muchos operadores más complicados que puedes usar (creo que incluso está completo), pero en general no usarás esas características.

+1

Uno puede buscar líneas en un archivo con AWK tan rápido como con Grep. Ese es el primer caso descrito aquí: [grep vs awk: 10 ejemplos de búsqueda de patrones (theunixschool)] (http://www.theunixschool.com/2012/09/grep-vs-awk-examples-for-pattern-search. html). – Hibou57

24

Solo quiero mencionar una cosa, hay muchas herramientas que pueden hacer procesamiento de texto, p. ordenar, cortar, dividir, unir, pegar, comm, uniq, columna, rev, tac, tr, nl, pr, cabeza, cola .....

son muy útiles pero tienes que aprender sus opciones etc.

Una forma perezosa (no la mejor) para aprender el procesamiento de texto podría ser: solo aprenda grep, sed y awk. con estas tres herramientas, puede resolver casi el 99% de los problemas de procesamiento de texto y no necesita memorizar más de diferentes cmds y opciones. :)

Y, si aprendió y usó los tres, sabía la diferencia. En realidad, la diferencia aquí significa qué herramienta es buena para resolver qué tipo de problema.

una manera más perezosa podría estar aprendiendo un lenguaje de script (python, perl o ruby) y hacer cada procesamiento de texto con él.

+2

Depende de la complejidad del trabajo hacer aparte de la coincidencia de patrones. Si hay mucha lógica aparte de la magia de patrones, Python será una mejor opción, si la lógica circundante es más simple, SEd/Grep/AWK. – Hibou57

+1

En realidad, siguiendo esta línea de razonamiento podrías recomendar simplemente aprender y usar awk, ya que puede hacer la mayor parte de lo que sed y grep pueden hacer. –