2009-05-15 16 views
20

dass das grepen Wenn ichls Konserve nach dem Färben

tun
$ ls -l --color=always 

ich eine Liste der Dateien im Verzeichnis mit einigen schönen Färbung für verschiedene Dateitypen etc .. Jetzt

bekommen, möchte ich sein in der Lage, den farbigen Ausgang von ls durch grep zu leiten, um einige Dateien herauszufiltern, die ich nicht benötige. Der Schlüssel ist, dass ich immer noch die Färbung nach dem Grep-Filter beibehalten möchte.

$ ls -l --color=always | grep -E some_regex 

^ich verlieren die Färbung nach grep

EDIT: Ich bin mit Headless-Server Ubuntu 8.10, Bash 3.2.39, ziemlich ein Lager installieren ohne Phantasie configs

+0

FWIW es funktioniert für mich. Es könnte etwas mit dem Terminalemulator zu tun haben, den Sie verwenden. – Anonymous

Antwort

45

Ihr grep entfernt wahrscheinlich ls 's Farbcodes, da es eine eigene Farbgebung hat.

Sie „könnte“ dies tun:

ls -l --color=always | grep --color=never pattern 

Es ist jedoch sehr wichtig, dass Sie verstehen, was genau sind Sie grep Ping hier. Nicht nur ist grep ping ls unnötig (verwenden Sie stattdessen eine glob), dieser besondere Fall ist grep ping durch nicht nur Dateinamen und Datei-Statistiken, sondern auch durch die Farbcodes von ls hinzugefügt! Die echte Antwort auf Ihre Frage ist: grep es. Es ist nie notwendig, ls in irgendwas zu pipettieren oder seine Ausgabe zu erfassen. ls ist nur für die menschliche Interpretation gedacht (z. B. zu schauen in einer interaktiven Shell nur, und für diesen Zweck ist es sehr praktisch, natürlich). Wie bereits erwähnt, können Sie ls aufzählt Dateien mithilfe Klackse filtern, was:

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 sehr empfehlen Sie diese beiden ausgezeichneten Dokumente zu diesem Thema lesen:

+2

Wie üblich, Shell-Codierung auf höheren (und gesunden) Ebenen. ++ – TheBonsai

+0

+1, tolle Erklärung, und das sind wirklich gute Links! – Andy

+0

@lhunath Ich habe nie gemerkt, wie schlimm solche Praxis sein könnte, danke für die Links und obwohl ich einige erweiterte Regex verwendete werde ich versuchen, diese zu glob und migrieren native innerhalb 'ls' – duckyflip

0

Sie sollten überprüfen, ob Sie wirklich den „echten“ ls verwenden, nur durch direkt die binären Aufruf:

/bin/ls .... 

denn: Der Code, den Sie wirklich beschrieben sollte funktionieren, wenn ls --color immer ignoriert = für so ich seltsamer Grund oder Fehler.

Ich vermute, einige Alias ​​oder Funktion, die (direkt oder über eine Variable) einige Optionen hinzufügen. Überprüfen Sie, dass dies nicht der Fall ist.