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.tmp
Desde la página de manual de grep:
fuente
-F
¿ No ? ¿estás en Solaris? Si el uso de modo/usr/xpg4/bin/grep
grep
dentro 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-F
bandera.Debe escapar del
.
(punto) (porque coincide con cualquier carácter (no solo.
) si no se escapa) o usar la-F
bandera con grep.-F
flag 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:
-x
fuerzas para coincidir con toda la línea..
sin-F
bandera son incorrectas.-x
cambio envolviendo su cadena de patrón con^
y$
. En este caso, asegúrese de no usar-F
, en su lugar, escape.
, porque-F
evitará 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
-F
no será necesario si.
se escapa correctamente.-F
disponible 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. ;)-F
estaba disponible. (Dije: "o usar la-F
bandera congrep
")-F
es 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 :
\b
indica / establece límites.Parece funcionar bastante rápido
fuente
search_word
lí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.tmp
fuente
Preferiría:
salud
fuente
ABBxlog
Necesitaba esta función, pero también quería asegurarme de no devolver líneas con un prefijo antes de ABB.log:
fuente
\W
se satisface el liderazgo , que es cualquier carácter que no sea un espacio en blanco, entoncesxABBxlog
.