Digamos que tengo un archivo que contiene las siguientes dos líneas:
2014-05-05 09:11:53 /aa/bbbb/cccccc 29899
2014-05-05 09:12:17 /aa/bbbb/cccccc?dddddddd 16767
Necesito obtener la línea que contiene el patrón /aa/bbbb/cccccc
solamente, no necesito la segunda línea que contiene caracteres adicionales, es decir ?dddddddd
. Ahora cuando lo intenté
grep '/aa/bbbb/cccccc' file
Luego se seleccionan las dos líneas. Necesito la línea completa, así grep -o
que no podría ser una solución.
¿Cuál podría ser la posible solución usando grep para que solo se seleccione la primera línea en función del patrón de búsqueda?
fuente
grep '/aa/bbbb/cccccc ' file
/aa/bbbb/cccccc
cadena.grep -E '/aa/bbbb/cccccc(\s+|$)' file
grep -E '(^|\s)/aa/bbbb/cccccc(\s|$)' file
La forma más sencilla sería agregar un espacio después de su patrón:
O, para que coincida con todo tipo de espacios en blanco:
O
O, con una anticipación positiva :
O, con una anticipación negativa :
O puedes revertir el partido:
O, para coincidir también con las líneas que contienen nada más que su patrón (sin espacios en blanco al final):
O bien, puede usar un pequeño script:
En awk:
O, si no sabe en qué campo está su patrón
En perl
fuente
grep -v 'c?' file
por qué no lo usasgrep -v '?' file
porque el archivo solo tiene dos líneas.grep -v '?'
sería suficiente.Para complementar la respuesta de @AvinashRaj , puede usar también comandos como este.
fuente