Behalten Sie die ls-Farbgebung nach dem Grep'ing bei
Frage
Wenn ich mache
$ ls -l --color=always
Ich erhalte eine Liste der Dateien im Verzeichnis mit einigen schönen Farben für verschiedene Dateitypen usw.
Jetzt möchte ich in der Lage sein, die farbige Ausgabe von weiterzuleiten ls
durch grep
um einige Dateien herauszufiltern, die ich nicht benötige.Der Schlüssel ist, dass ich die Farbgebung nach dem Grep-Filter immer noch beibehalten möchte.
$ ls -l --color=always | grep -E some_regex
^ Ich verliere die Färbung nach grep
BEARBEITEN:Ich verwende den Headless-Server Ubuntu 8.10, Bash 3.2.39, so ziemlich eine Standardinstallation ohne ausgefallene Konfigurationen
Lösung
Ihr grep wahrscheinlich ist das Entfernen ls
des Farbcodes, weil sie ihre eigene Färbung hat eingeschaltet.
Sie "könnte" dies tun:
ls -l --color=always | grep --color=never pattern
Es ist jedoch sehr wichtig, dass Sie verstehen, was genau hier Sie grep
ping. Nicht nur ist grep
ping ls
unnötig (verwenden Sie einen glob
statt), dieser spezielle Fall ist grep
ping nicht nur durch Dateinamen und Dateistatistiken, sondern auch durch die Farbcodes hinzugefügt von ls
!
Die wirkliche Antwort auf Ihre Frage ist: Verwenden Sie es nicht grep
. Es ist nie ein Bedürfnis, ls
in etwas oder seine Ausgabe zu erfassen. ls
ist nur für die menschliche Interpretation gedacht (z. zu aussieht auf in einem interaktiven Shell nur, und zu diesem Zweck es äußerst praktisch ist, natürlich). Wie bereits erwähnt, können Sie auswählen, welche Dateien ls
unter Verwendung Klackse aufzählt:
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:
- Erklärung der Schlechtigkeit Parsing
ls
: http://mywiki.wooledge.org/ParsingLs - Die Macht des
glob
s: http://mywiki.wooledge.org/glob
Andere Tipps
Sie sollten überprüfen, ob Sie wirklich das „echte“ ls verwenden, indem Sie einfach die Binärdatei direkt aufrufen:
/bin/ls ....
Weil:Der von Ihnen beschriebene Code sollte wirklich funktionieren, es sei denn, ls ignoriert --color=always aus irgendeinem seltsamen Grund oder Fehler.
Ich vermute einen Alias oder eine Funktion, die (direkt oder über eine Variable) einige Optionen hinzufügt.Stellen Sie sicher, dass dies nicht der Fall ist.