Quiero imprimir todo el registro si contiene palabras y algunos caracteres, que son opcionales. Guión:
/mount[ein]{0,2}/{
print $0}
Lamentablemente no funciona. Sin "{" y "}" funciona. Intenté con "\" antes de "{":
/mount[ein]\{0,2\}/{
print $0}
Otro ejemplo Para archivo:
mountx
mounte
mountee
mounteee
Awk:
awk '/mount[ein]{0,2}$/' file
Y resultado:
//nada
Sistema: Debian 7.8 Linux ibm 3.2.0-4-amd64 # 1 SMP Debian 3.2.68-1 + deb7u1 x86_64 GNU / Linux
Respuestas:
Su expresión regular funciona tanto con un POSIX compatible
awk
como con GNUawk
.Dado el hecho de que los caracteres
e
,i
yn
deben estar presentes de cero a tres veces, pero que no hay más restricciones, esta parte se puede eliminar del patrón comomount
sigue cualquier cosa o nada coincide de todos modos.print $0
No es necesario especificar la acción ( ) que también es la predeterminada.Su comando puede entonces simplificarse para:
Si desea que se use el rango, debe especificar algo después, aquí hay un ejemplo:
Es decir en Solaris donde el POSIX
awk
está en/usr/xpg4/bin
.Mismo comportamiento en la Mint 17.1 basada en Debian:
Sin embargo, parece que
mawk
, que afirma el cumplimiento POSIX, no admite la expresión de intervalo (llave).Este es un error conocido .
fuente
awk '/mount[ein]{1,2}\r$/' input
Ejemplo tst.txt:
script awk (GNU Awk 3.1.7)
resultado
hombre awk
fuente
No estoy seguro acerca de su formato de comando de montaje, y la pregunta aparece como una pregunta "awk", sin awk en su comentario.
¿Es esto lo que estás buscando?
"imprime todas las líneas que contienen un 0" (o cualquier cadena que estés buscando) desde un archivo - usa el comando
resultará en
donde temp.txt es
fuente