varias texto regulares palabras palabra expresiones exacta ejemplo comprimidos buscar archivos archivo linux unix search command-line grep

linux - texto - grep, pero solo ciertas extensiones de archivo



grep linux (11)

Algunas de estas respuestas parecían tener demasiada sintaxis, o produjeron problemas en mi servidor Debian. Esto funcionó perfectamente para mí:

Revolución de PHP: ¿Cómo copiar archivos en Linux, pero solo ciertas extensiones de archivo?

A saber:

grep -r --include=/*.txt ''searchterm'' ./

... o versión insensible a mayúsculas ...

grep -r -i --include=/*.txt ''searchterm'' ./

  • grep : comando

  • -r : recursivamente

  • -i : ignorar-caso

  • --include : todos los archivos de texto * .txt: (escape con / solo en caso de que tenga un directorio con asteriscos en los nombres de archivo)

  • ''searchterm'' : Qué buscar

  • ./ : Comience en el directorio actual.

Estoy trabajando en escribir algunos scripts para grep ciertos directorios, pero estos directorios contienen todo tipo de tipos de archivos.

Quiero grep solo .h y .cpp por ahora, pero tal vez algunos otros en el futuro.

Hasta ahora tengo:

{ grep -r -i CP_Image ~/path1/; grep -r -i CP_Image ~/path2/; grep -r -i CP_Image ~/path3/; grep -r -i CP_Image ~/path4/; grep -r -i CP_Image ~/path5/;} | mailx -s GREP [email protected]

¿Alguien me puede mostrar cómo agregaría ahora solo las extensiones de archivo específicas?


Como se trata de encontrar archivos, ¡usemos find !

Usando GNU find, puede usar la opción -regex para encontrar esos archivos en el árbol de directorios cuya extensión es .h o .cpp :

find -type f -regex ".*/./(h/|cpp/)" # ^^^^^^^^^^^^^^^^^^^^^^^

Entonces, es solo una cuestión de ejecutar grep en cada uno de sus resultados:

find -type f -regex ".*/./(h/|cpp/)" -exec grep "your pattern" {} +

Si no tiene esta distribución de hallazgos, debe utilizar un enfoque como el de Amir Afghani , usando -o para concatenar las opciones ( el nombre termina con .h o con .cpp ):

find -type f /( -name ''*.h'' -o -name ''*.cpp'' /) -exec grep "your pattern" {} + # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Y si realmente desea usar grep , siga la sintaxis indicada para: --include :

grep "your pattern" -r --include=*.{cpp,h} # ^^^^^^^^^^^^^^^^^^^


Debajo de la respuesta es buena

grep -r -i --include /*.h --include /*.cpp CP_Image ~/path[12345] | mailx -s GREP [email protected]

Pero se puede actualizar a:

grep -r -i --include /*.{h,cpp} CP_Image ~/path[12345] | mailx -s GREP [email protected]

Lo que puede ser más simple.


Debería escribir "-exec grep" para cada "-o -name"

find . -name ''*.h'' -exec grep -Hn "CP_Image" {} /; -o -name ''*.cpp'' -exec grep -Hn "CP_Image" {} /;

O agruparlos por ()

find . /( -name ''*.h'' -o -name ''*.cpp'' /) -exec grep -Hn "CP_Image" {} /;

Opción ''-Hn'' muestra el nombre del archivo y la línea.


La forma más fácil es

find . -type f -name ''*.extension'' | xargs grep -i string


No hay opción -r en los servidores HP y Sun, de esta manera me funcionó en mi servidor HP

find . -name "*.c" | xargs grep -i "my great text"

-i es para la búsqueda insensible de la cadena


Qué tal si:

find . -name ''*.h'' -o -name ''*.cpp'' -exec grep "CP_Image" {} /; -print


Solo usa el parámetro --include , como este:

grep -r -i --include /*.h --include /*.cpp CP_Image ~/path[12345] | mailx -s GREP [email protected]

Eso debería hacer lo que quieras.

Notas de sintaxis:

  • -r - buscar recursivamente
  • -i - búsqueda de mayúsculas y minúsculas
  • --include=/*.${file_extension} - busca archivos que coincidan con la extensión (es) o patrón de archivo solamente

Soy consciente de que esta pregunta es un poco anticuada, pero me gustaría compartir el método que normalmente utilizo para encontrar los archivos .c y .h :

tree -if | grep //.[ch]//b | xargs -n 1 grep -H "#include"

o si necesita el número de línea también:

tree -if | grep //.[ch]//b | xargs -n 1 grep -nH "#include"


ag (el buscador de plata) tiene una sintaxis bastante simple para esto

-G --file-search-regex PATTERN Only search files whose names match PATTERN.

asi que

ag -G *.h -G *.cpp CP_Image <path>


grep -rnw "some thing to grep" --include=*.{module,inc,php,js,css,html,htm} ./