2010-06-02 7 views

Respuesta

49

En awk:

awk '$2 == "LINUX" { print $0 }' test.txt 

Ver awk by Example para una buena introducción a awk.

En sed:

sed -n -e '/^[0-9][0-9]* LINUX/p' test.txt 

Ver sed by Example para una buena introducción a sed.

+0

¿qué pasa con LINUX puede ser Linux o Linux? – yael

+0

Las páginas que he vinculado explican cómo usar expresiones regulares en las herramientas respectivas.La expresión regular para que coincida con LINUX o Linux es L (INUX | inux) (en términos generales, las diferentes herramientas a veces tienen una sintaxis ligeramente diferente). Por cierto, si esto es tarea, debe etiquetarse como tal. –

+0

Si desea que la coincidencia sea completamente insensible a las mayúsculas, consulte las funciones 'toupper' (o' tolower') en 'awk'. –

4

probar estos:

egrep -i '^\w+ LINUX ' myfile 

awk '{IGNORECASE=1}{if ($2 == "LINUX") print}' myfile 

sed -ne '/^[0-9]* [Ll][Ii][Nn][Uu][Xx] /p' myfile 

edición: modificado para el caso de falta de sensibilidad

+0

La pregunta menciona explícitamente 'awk' (y' sed' en un comentario). –

+0

¿qué pasa con LINUX puede ser Linux o Linux? – yael

3

En GNU sed coincidencias entre mayúsculas y minúsculas se pueden hacer usando el I modificador:

sed -n '/^[^[:space:]][[:space:]]\+linux[[:space:]]\+/Ip' 

Se coincidir con firmeza "Linux", "Linux", "Linux", "Linux" y otros como el segundo campo (después del primer campo que puede ser cualquier carácter no en blanco) y rodeado por cualquier cantidad (al menos una) de cualquier espacio en blanco (principalmente espacio y pestaña, aunque puede usar [:blank:] para limitar estrictamente eso).

4

Este es un caso en el que se puede utilizar la hermosa idiomática awk:

awk '$2=="LINUX"' file 

Es decir:

  • La acción predeterminada de awk cuando se encuentra en una condición verdadera es imprimir la línea actual .
  • Dado que $2 == "LINUX" es verdadero siempre que el 2do campo sea LINUX, esto imprimirá aquellas líneas en las que esto sucede.

En caso de que quiera imprimir todas aquellas líneas que coincidan con LINUX no importa si se trata de mayúsculas o minúsculas, utilice toupper() capitalizar todos ellos:

awk 'toupper($2)=="LINUX"' file 

O IGNORECASE con cualquiera de estos syntaxs :

awk 'BEGIN {IGNORECASE=1} $2=="LINUX"' file 
awk -v IGNORECASE=1 '$2=="LINUX"' file 
Cuestiones relacionadas