Conservano ls colorazione dopo grep'ing
Domanda
Se faccio
$ ls -l --color=always
ho un elenco di file all'interno della directory con qualche bella colorazione per i diversi tipi di file, ecc ..
Ora, voglio essere in grado di inviare l'output a colori di ls
attraverso grep
per filtrare alcuni file non ho bisogno. La chiave è che ho ancora voglia di conservare la colorazione dopo il filtro grep.
$ ls -l --color=always | grep -E some_regex
^ perdo la colorazione dopo grep
EDIT: sto usando senza testa-server di Ubuntu 8.10, Bash 3.2.39, praticamente un magazzino installare senza configs fantasia
Soluzione
Il grep è probabilmente rimuovendo i codici colore ls
s 'perché ha la sua colorazione accesa.
"potrebbe" fare questo:
ls -l --color=always | grep --color=never pattern
Tuttavia, è molto importante che si capisce che cosa esattamente si sta grep
ping qui. Non solo è glob
ping <=> inutili (utilizzare un <=> invece), questo caso particolare è <=> ping attraverso non i nomi dei file e le statistiche dei file solo, ma anche attraverso i codici dei colori aggiunti da <=>!
La vera risposta alla tua domanda è: non <=> esso. Non c'è mai una necessità di tubo di <=> in qualcosa o catturare la sua uscita. <=> è destinato solo per l'interpretazione umana (ad es. Per cercare a in un interattivo solo shell, e per questo scopo è estremamente maneggevole, ovviamente). Come accennato prima, è possibile filtrare quali file <=> enumera utilizzando gocce:
ls -l *.txt # Show all files with filenames ending with `.txt'.
ls -l !(foo).txt # Show all files with filenames that end on `.txt' but aren't `foo.txt'. (This requires `shopt -s extglob` to be on, you can put it in ~/.bashrc)
I altamente consigliamo di leggere questi due eccellenti documenti sulla questione:
- Spiegazione della cattiveria di parsing <=>: http://mywiki.wooledge.org/ParsingLs
- Il potere di <=> s: http://mywiki.wooledge.org/glob
Altri suggerimenti
Si dovrebbe verificare se si sta realmente utilizzando i ls "reali", semplicemente chiamando direttamente il file binario:
/bin/ls ....
A causa:. Il codice che hai descritto in realtà dovrebbe funzionare, a meno che ls ignora --color = sempre per qualche motivo strano o bug
Ho il sospetto che alcuni alias o una funzione che aggiunge (direttamente o tramite una variabile) alcune opzioni. Fare doppio verificare che questo non è il caso.