Evidenziare l'output di ricerca della console, visualizzando l'intera output di command

Quando uso, ad esempio, cat file.txt | grep --color=tty "pattern" cat file.txt | grep --color=tty "pattern" Ottengo il model che cerco evidenziato. Quando voglio un certo context intorno ad each colpo, grep ha i parametri -A , -B e -C .

Tuttavia, voglio visualizzare l'integer file (o qualsiasi command output) e evidenziare un certo pattern. Esiste un tale command o strumento di evidenziazione?

C'era una risposta su unix.stackexchange.com che aveva questo trucco:

 grep -E --color 'pattern|$' file.txt 

o

 grep --color 'pattern\|$' file.txt 

che corrisponde al tuo pattern o alla fine di each linea. Solo il model è evidenziato.

Mi piace l' ack .

 ack --passthru somepattern filename 

È come grep, ma meglio. Viene evidenziato per impostazione predefinita e con l'opzione --passthru viene visualizzato l'integer file (o l'ingresso standard) anziché solo le linee corrispondenti.

Raccommand anche l'uso di less (o simili), ma voglio mostrarvi una soluzione più didattica. Una volta definita questa function:

 function highlight ()
 {
     $ 1 / `tput smso` &` tput rmso` / g "" $ {2: -} "
 }

Puoi utilizzarla in questo modo:

 command | highlight pattern highlight pattern file.txt 

Nota: questa versione è distinzione tra maiuscole e minuscole, per modificare che appendono solo dopo g nell'espressione sed .

Il passaggio di -C a grep con un valore sufficientemente elevato lo farà.

less è evidenziare il model, così

 less -p 'mypattern' file.txt 

o

 ridiculously | long | pipe | less 

e poi in less / per cercare un model che verrà evidenziato.

Nota a margine:

Ad esempio, puoi migliorare il tuo command
impostare alias alias grep="grep --color=tty" e usarlo così:

 grep 'mypattern' file.txt; 

C'è un bel strumento di supercat , che serve esattamente a questo scopo. Può colorare l'output della tua console e produrre un "html" evidenziato dal tuo input.