grep(1)
utiliza POSIX Basic Regular Expressions por defecto, y POSIX Extended Regular Expressions cuando se usa con la opción -E
.
En POSIX Regular Expressions caracteres especiales no han escapado sin definir comportamiento cuando, ej. \s
, y no hay sintaxis para concordancia no codiciosa, ej. +?
. Además, en los BRE, los operadores +
y |
no están disponibles, y los paréntesis se deben escapar para realizar la agrupación.
El POSIX character classes[[:space:]]
y [[:alnum:]_]
son unas alternativas portátiles a \s
y \w
respectivamente.
Excluyendo el siguiente carácter a juego a partir de una repetición puede usarse para emular igualación no codicioso, ex. [^*]+?\w*:
es equivalente a [^*[:alnum:]_:]+[[:alnum:]_]*:
.
La expresión regular dada puede representarse como varios sobres de respuesta:
grep -e '^[[:space:]]*\*[[:space:]]\{1,\}\[ \][^*[:alnum:]_+]\{1,\}[[:alnum:]_]*:[^*]\{1,\}[[:digit:]]$' \
-e '[^*]\{1,\}\.com\.au$' file1
o un ERE:
grep -E '^[[:space:]]*\*[[:space:]]*\[ \][^*[:alnum:]_:]+[[:alnum:]_]*:[^*]+[[:digit:]]$|[^*]+\.com\.au$' \
file1
Tenga en cuenta que la implementación GNU de grep(1)
permite para ambas clases de caracteres cortos (\s
y \w
) y la repetición no codiciosa (+?
), como extensiones no portátiles.
eso es fresco, pero ¿cómo puedo hacer una búsqueda de varias líneas? grep asumiendo línea de acción consiste en la línea .. Quiero una búsqueda en varios línea .. Entonces, ¿hay alguna solución? –
@KiranVemuri Esa es una pregunta diferente a la que planteaste aquí. Ese tema está cubierto por [esta pregunta SO] (http: // stackoverflow.com/questions/152708/how-can-i-search-for-a-multiline-pattern-in-a-file-use-pcregrep) –
Por defecto, egrep tampoco comprende \ s o \ w. Sin embargo, puede usar el indicador --perl-regexp si PCRE se ha compilado en. –