Tengo estos:
$ cat a.tmp
ABB.log
ABB.log.122
ABB.log.123
Quería encontrar una coincidencia exacta de ABB.log.
Pero cuando lo hice
$ grep -w ABB.log a.tmp
ABB.log
ABB.log.122
ABB.log.123
los muestra todos.
¿Puedo obtener lo que quería usando grep?

sed -r "s/^(.*)$/^\1$/" patterns.txt | egrep -f - a.tmpDesde la página de manual de grep:
fuente
-F¿ No ? ¿estás en Solaris? Si el uso de modo/usr/xpg4/bin/grepgrepdentro de un script bash y esta opción es mejor que usar una expresión regular como se sugiere en la respuesta aceptada. Porque tengo un carácter especial dentro de la variable que estoy buscando (como.) y no tengo que escapar de ellos cuando uso el comando.Esto es lo que hago, aunque usar anclas es la mejor manera:
fuente
ABB.log, que no es el caso general, es decir, fallará la mayor parte del tiempo.La mayoría de las sugerencias fallarán si hay un solo espacio inicial o final, lo que importaría si el archivo se está editando a mano. Esto lo haría menos susceptible en ese caso:
Un simple ciclo while-read en shell haría esto implícitamente:
fuente
de manera similar con awk
fuente
Tengo la intención de agregar una explicación adicional sobre los intentos de OP y otras respuestas también.
También puede usar la solución de John Kugelmans como esta:
citar la cadena y escapar del punto (
.) hace que ya no necesite la-Fbandera.Debe escapar del
.(punto) (porque coincide con cualquier carácter (no solo.) si no se escapa) o usar la-Fbandera con grep.-Fflag lo convierte en una cadena fija (no una expresión regular).Si no cita la cadena, es posible que necesite una barra invertida doble para escapar del punto (
.):Prueba:
Nota:
-xfuerzas para coincidir con toda la línea..sin-Fbandera son incorrectas.-xcambio envolviendo su cadena de patrón con^y$. En este caso, asegúrese de no usar-F, en su lugar, escape., porque-Fevitará la interpretación de expresiones regulares de^y$.EDITAR: (Añadiendo una explicación adicional con respecto a @hakre):
Si desea hacer coincidir una cadena que comience con
-, debe usar--con grep. Lo que sigue--se tomará como entrada (no como opción).Ejemplo:
fuente
-Fno será necesario si.se escapa correctamente.-Fdisponible cuando escribiste esto? Si no es así, ¿qué sistema estaba usando? No pude encontrar esa información en su respuesta hasta ahora, que incluso ahora es el caso cuando lo releo nuevamente. Realmente seguro, leí tu respuesta por completo al menos dos veces. ;)-Festaba disponible. (Dije: "o usar la-Fbandera congrep")-Fes la respuesta, ¿por qué preocuparse por escapar? ¿Cuál es tu opinión sobre eso?Esto funcionó bien para mí al intentar hacer algo similar:
fuente
fuente
Funciona para mi :
\bindica / establece límites.Parece funcionar bastante rápido
fuente
search_wordlímites de palabras separados. Por ejemplo, coincidiría con la línea "foo barra de palabras de búsqueda".Esto es con HPUX, si el contenido de los archivos tiene espacio entre palabras, use esto:
egrep "[[:space:]]ABC\.log[[:space:]]" a.tmpfuente
Preferiría:
salud
fuente
ABBxlogNecesitaba esta función, pero también quería asegurarme de no devolver líneas con un prefijo antes de ABB.log:
fuente
\Wse satisface el liderazgo , que es cualquier carácter que no sea un espacio en blanco, entoncesxABBxlog.