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

War es hilfreich?

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 grepping. Nicht nur ist grepping ls unnötig (verwenden Sie einen glob statt), dieser spezielle Fall ist grepping 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:

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top