Wie kann ich grep
Registerkarte ( \t ) in Dateien auf der Unix-Plattform?
Antworten
Zu viele Anzeigen?Die $' \t Die in anderen Antworten angegebene Notation ist shellspezifisch - sie scheint in bash und zsh zu funktionieren, ist aber nicht universell.
HINWEIS: Das Folgende gilt für die fish
Shell und funktioniert nicht in Bash :
In der fish
Shell kann man eine nicht-quotierte \t
zum Beispiel:
grep \t foo.txt
Oder man kann die Hex- oder Unicode-Schreibweise verwenden, z.B.:
grep \X09 foo.txt
grep \U0009 foo.txt
(diese Notationen sind für esoterischere Zeichen nützlich)
Da diese Werte nicht in Anführungszeichen gesetzt werden müssen, können Sie die in Anführungszeichen gesetzten und die nicht in Anführungszeichen gesetzten Werte durch Verkettung kombinieren:
grep "foo"\t"bar"
Diese alternativen binären Identifizierungsmethoden sind voll funktionsfähig. Und die mit awk gefällt mir sehr gut, da ich mir die syntaktische Verwendung mit einzelnen Binärzeichen nicht ganz merken konnte. Es sollte jedoch auch möglich sein, einer Shell-Variablen einen Wert in einer POSIX-portablen Weise zuzuweisen (d.h. TAB= echo "@" | tr "\100" "\011"
), und verwenden Sie es dann von dort aus überall in einer POSIX-portablen Art und Weise (d.h. grep "$TAB" Dateiname). Diese Lösung funktioniert zwar gut mit TAB, aber auch mit anderen Binärzeichen, wenn ein anderer gewünschter Binärwert in der Zuweisung verwendet wird (anstelle des Wertes für das TAB-Zeichen "tr").