verdadero varios utilizar una texto regulares puede patrones palabras opciones los linea falso expresiones egrep con comando caracteres buscar archivos archivo unix shell command-line grep

unix - varios - MĂșltiples grep buscar/ignorar patrones



grep varios patrones (5)

Por lo general, uso la siguiente canalización para grep para una cadena de búsqueda particular y, sin embargo, ignoro otros patrones:

grep -Ri 64 src/install/ | grep -v /.svn | grep -v "file"| grep -v "2/.5" | grep -v "2/.6"

¿Se puede lograr esto de manera sucinta? Estoy usando GNU grep 2.5.3.


Es posible que desee utilizar ack-grep que permite excluir también con perl regexp y evitar todos los directorios de VC, lo que es excelente para grepping código fuente.


La siguiente secuencia de comandos eliminará todos los archivos excepto una lista de archivos:

echo cleanup_all $@ if [[ $# -eq 0 ]]; then FILES=`find . -type f` else EXCLUDE_FILES_EXP="(" for EXCLUDED_FILE in $@ do EXCLUDE_FILES_EXP="$EXCLUDE_FILES_EXP./$EXCLUDED_FILE|" done # strip last char EXCLUDE_FILES_EXP="${EXCLUDE_FILES_EXP%?}" EXCLUDE_FILES_EXP="$EXCLUDE_FILES_EXP)" echo exluded files expression : $EXCLUDE_FILES_EXP FILES=`find . -type f | egrep -v $EXCLUDE_FILES_EXP` fi echo removing $FILES for FILE in $FILES do echo "cleanup: removing file $FILE" rm $FILE done


Simplemente canalice su salida sin filtrar en una sola instancia de grep y use una expresión regular extendida para declarar lo que quiere ignorar:

grep -Ri 64 src/install/ | grep -v -E ''(/.svn|file|2/.5|2/.6)''

Editar: Para buscar varios archivos tal vez intente

find ./src/install -type f -print |/ grep -v -E ''(/.svn|file|2/.5|2/.6)'' | xargs grep -i 64

Edición: Ooh. Olvidé agregar el truco simple para detener el uso de múltiples instancias de grep, a saber:

ps -ef | grep something | grep -v grep

Reemplazando eso con

ps -ef | grep "[s]omething"

elimina la necesidad del segundo grep.


Use la opción -e para especificar múltiples patrones:

grep -Ri 64 src/install/ | grep -v -e ''/.svn'' -e file -e ''2/.5'' -e ''2/.6''

También podría interesarle el indicador -F , que indica que los patrones son cadenas fijas en lugar de expresiones regulares. Ahora no tienes que escapar del punto:

grep -Ri 64 src/install/ | grep -vF -e .svn -e file -e 2.5 -e 2.6

Me di cuenta de que estabas grep saltando ".svn". Probablemente desee omitir cualquier directorio llamado ".svn" en su grep recursivo inicial. Si yo fuera tú, haría esto en su lugar:

grep -Ri 64 src/install/ --exclude-dir .svn | grep -vF -e file -e 2.5 -e 2.6


puedes usar awk en lugar de grep

awk ''/64/&&!/(/.svn|file|2/.[56])/'' file