Sto cercando di ottenere ogni comando grep per evidenziare i risultati in un colore diverso. Posso farlo manualmente con una linea come questa:
ls -l GREP_COLORS='mt=01;32' grep c | GREP_COLORS='mt=01;31' grep o | GREP_COLORS='mt=01;34' grep n | GREP_COLORS='mt=01;36' grep f
Ogni c
personaggio verrà evidenziato in verde e ogni o
personaggio verrà evidenziato in rosso, ecc ...
Affinché questo esempio funzioni, devi assicurarti di avere sempre i
--color=always
tuoi comandi grep. Ho impostato questo nel mio.bashrc
modo che grep abbia sempre i colori:
export GREP_OPTIONS='--color=always'
Quello che sto tentando di realizzare è avvolgere questa funzionalità con un alias in modo da poter semplicemente chiamare grep
e avere un GREP_COLORS
valore diverso ogni volta. Comprendo la considerazione di più shell per ogni nuovo grep convogliato e sto provando a superare questo creando alcuni file (uno per ogni colore), per indicare che sono già stati utilizzati.
Ho fatto alcuni tentativi, ma stranamente, questo sembra funzionare al meglio. Ho questo nel mio .bashrc
:
alias mg="mygrep"
mygrep(){
# define possible colors
COLORS=("01;32" "01;31" "01;34" "01;36")
COUNTER=0
NUM=0
# as long as the color has already been used, keep searching
while [ -f /home/lior/Desktop/mygrep_$NUM ]; do
# get a random index
let NUM=`shuf --input-range=0-$(( ${#COLORS[*]} - 1 )) | head -1`
wait ${!}
$(( COUNTER+=1 ))
if [ "$COUNTER" -ge ${#COLORS[@]} ]; then
# remove all color locks
rm /home/lior/Desktop/mygrep_*
wait ${!}
fi
done
# mark this color as used
touch /home/lior/Desktop/mygrep_$NUM
wait ${!}
# lets go!
GREP_COLORS="mt=${COLORS[$NUM]}" grep "$@"
}
Sto usando questo alias in questo modo:
ll | mg c | mg o | mg n | mg f
I risultati sono piuttosto interessanti. Vi sono tuttavia alcuni errori che sono leggermente diversi ogni volta. Ecco un paio di schermate:
Sembra che mentre la shell passa attraverso ogni comando pipe, la funzione precedente non ha ancora terminato la sua esecuzione. Cerca di rimuovere i file che non esistono più. Non sono troppo sicuro da dove command not found
provengano quegli altri errori.
Come puoi vedere, ho inserito alcuni wait
comandi per provare a completare la manipolazione del file, ma questo non sembra funzionare troppo bene. Un'altra cosa che ho già provato è usare la memoria condivisa /dev/shm
ma ha prodotto risultati simili.
Come farei per ottenere i risultati desiderati?
Nota:
Sto cercando risposte che semplicemente racchiudano il comando grep in quanto ha molte funzionalità che voglio usare e intendo inserire altra logica tra le pipe, quindi non voglio fornire tutti i termini di ricerca contemporaneamente. Inoltre non sto cercando altri strumenti "grep like". Mi dispiace per @terdon che ha già pubblicato un fantastico suggerimento perl.
alias mg="mygrep; grep"
?
mygrep;
si trasforma in un nuovo comando in sé e il flusso di dati si perde. La pipa in arrivo da ls
verrebbe passata mygrep;
e non grep. Almeno è così che lo capisco.
--color=always
tutti i tuoi comandi grep. L'ho impostato a livello globale nel mio .bashrc
. L'ho modificato nel post.