Quiero simular la operación AND en grep. Enumere todos los archivos que contengan "Algunas palabras" y que contengan "Algunas otras palabras" en cualquier parte del archivo.
Hasta ahora probé #
egrep -lir '(Some Words)(Some Other Words)' *.myfilesPero no está funcionando.
Usando herramientas GNU:
grep -lirZ string1 . | xargs -d '\0' grep -li string2-l ) que contienen string1-i : no distingue entre mayúsculas y minúsculas, -r : recursivo, -Z : lista de archivos delimitada por ascii nulo (un delimitador seguro para nombres de archivos)string2. se refiere al directorio actual, que se busca recursivamentePor definición, grep es una herramienta que busca patrones línea por línea e imprime los que coinciden, como se indica en su página de manual. No hay forma de grep en varias líneas con un solo grep , a menos que haga lo que se indica en la respuesta de Dan donde usa grep junto con las herramientas GNU.
Si en cambio queremos grep en la misma línea y el orden en que "Algunas palabras" y "Algunas otras palabras" no importa, puede ejecutar el siguiente comando:
egrep -lir "(Some Words.*Some Other Words)|(Some Other Words.*Some Words)"Si el orden es importante, en el comando anterior simplemente elimine el orden incorrecto. Por ejemplo, si el orden correcto es primero "Algunas palabras" y luego "Algunas otras palabras", el comando debería verse así:
egrep -lir "Some Words.*Some Other Words"