/ / Bash alias query - bash, find, grep, alias

Consulta Bash alias - bash, find, grep, alias

¿Cómo puedo convertir el siguiente comando en un alias de bash?

find . -name "*.php" | xargs grep --color -n "search term"

Donde puedo especificar la extensión del archivo y el "término de búsqueda" es obviamente el término de búsqueda :)

Entonces, lo que quiero hacer es:

 searchFiles "php" "search term"

¿Cómo paso la entrada al alias? ¿Debo simplemente crear un script bash y tener el alias apuntando al script?

Respuestas

6 para la respuesta № 1

¿Qué hay de usar una función? Agregue esto a su .bashrc:

function searchFiles() {
find . -name *."$1" -print0 | xargs -0 grep --color -n "$2"
}

y luego usarlo como:

$ searchFiles c include


4 para la respuesta № 2

Podrías usar un alias, pero usar una función, como muestra Gonzalo, es lo más sensato que puedes hacer.

alias searchFiles=sh -c ""find . -name *."$1" -type f -print0 | xargs -0 grep --color -Hn "$2""" -

Si función o alias, recomiendo usar -print0 con encontrar y -0 con xargs. Esto proporciona un manejo de nombre de archivo más robusto (más comúnmente, espacios en nombres de archivo).


1 para la respuesta № 3

Mientras una función funciona, no podrá llamarse desdeotros programas y scripts (sin mucho dolor). (Un alias tendría el mismo problema.) Sería mi elección una secuencia de comandos separada, ya que parece que quieres invocarla directamente:

#!/bin/bash
# since you"re already using bash, depend on it instead of /bin/sh
# and reduce surprises later (you can always come back and look at
# porting this)

INCLUDE="*.$1"
PATTERN="$2"
grep --color -n "$PATTERN" --recursive --include="$INCLUDE" .

(No es necesario encontrar con lo que tienes)

Si esto solo se usara dentro de otra secuencia de comandos en lugar de hacerlo directamente, una función sería más fácil.


1 para la respuesta № 4

Las funciones de Shell son buenas, pero es posible que también desee echarle un vistazo a ack. Maneja la búsqueda específica de archivos, con codificación de colores, para que su ejemplo sea simplemente

ack --php somepattern