Según la documentación de GNU:
‘\<’ Match the empty string at the beginning of word.
‘\>’ Match the empty string at the end of word.
Mi / etc / fstab se ve así:
/dev/sdb1 /media/fresh ext2 defaults 0 0
Quiero que grep devuelva VERDADERO / FALSO por la existencia de / media / fresh. Traté de usar \<
y \>
no funcionó. ¿Por qué?
egrep '\</media/fresh\>' /etc/fstab
Solución alternativa:
egrep '[[:blank:]]/media/fresh[[:blank:]]' /etc/fstab
Pero se ve más feo.
Mi grep es 2.5.1
grep
regular-expression
Felipe Alvarez
fuente
fuente
/
que no se considera un carácter de palabra, por lo que regex no coincidirá - "\ b coincide antes y después de una secuencia alfanumérica" es más exacto que decir "antes y después de una palabra"Respuestas:
\<
y\>
coinciden con una cadena vacía al principio y al final de una palabra, respectivamente, y solo los caracteres constitutivos de la palabra son:De
man grep
:Entonces, su Regex está fallando porque
/
no es un carácter constituyente de palabra válido.En cambio, como tiene espacios alrededor, puede usar la
-w
opción degrep
hacer coincidir una palabra:Ejemplo:
fuente
Este problema con
\<
(y también\b
) se aplica no solo a/
, sino a todos los caracteres que no son palabras. (es decir, caracteres distintos de[[:alnum:]]
y_
.)El problema es que el motor de expresiones regulares siempre omitirá un carácter que no sea de palabra, como
/
cuando busca el siguiente ancla\<
. Es por eso que no debes poner caracteres que no sean palabras como/
justo después\<
. Si lo hace, por construcción, nada coincidirá.Una alternativa a la
-w
opción de grep, sería algo como esto:fuente