Abordagem: Separe as opções da linha de comando do padrão e os possíveis nomes de arquivos na linha de comando, depois conte os argumentos da linha de comando que não são opções. Se houver mais de um, execute o comando como está, caso contrário, marque no seu arquivo.
Em bash
:
mygrep () {
local -a opts
while [ "$#" -gt 0 ]; do
case "$1" in
--) opts+=( "$1" ); shift; break ;;
-*) opts+=( "$1" ) ;;
*) break
esac
shift
done
if [ "$#" -gt 1 ]; then
grep "${opts[@]}" "$@"
else
grep "${opts[@]}" "$@" "/my/file"
fi
}
A função separa as opções da linha de comando do restante da linha de comando e verifica se há mais de um argumento de linha de comando que não seja de opção (ou seja, algo diferente de um padrão). Se não houver, seu arquivo será marcado no final do comando.
Isso não funciona se você usar opções com argumentos de opção (por exemplo, -e PATTERN
), por isso é um pouco falho. Talvez possa servir como ponto de partida para outra pessoa?
Nos comentários, fica claro que o usuário não está interessado em executar grep
, mas sim em pesquisar arquivos com uma extensão específica.
A seguinte função shell faz isso:
extfind () {
local ext="$1"
if [ -z "$ext" ]; then
echo 'Missing extension' >&2
return 1
fi
shift
local dir="${1:-$HOME}"
find "$dir" -type f -name "*.$ext"
}
Esta função seria usada como
$ extfind txt
para localizar todos os arquivos cujos nomes terminam com .txt
no diretório inicial ou
$ extfind "[hc]" /usr/src
para localizar todos os arquivos cujos nomes terminam em .h
ou .c
no diretório /usr/src
.