Wenn ich in vim
bin, kann ich die Größe der Registerkarte mit dem folgenden Befehl ändern:
:set ts=4
Ist es möglich, die Tabulatorgröße auch für die cat
Befehlsausgabe festzulegen?
quelle
Wenn ich in vim
bin, kann ich die Größe der Registerkarte mit dem folgenden Befehl ändern:
:set ts=4
Ist es möglich, die Tabulatorgröße auch für die cat
Befehlsausgabe festzulegen?
Der erste Befehl hier emuliert die Formatierung, die Sie in sehen vim
. Es erweitert die Tabulatoren auf intelligente Weise auf die entsprechende Anzahl von Leerzeichen, basierend auf einer Tabstopp-Einstellung (ts) für jeweils 4 Spalten.
printf "ab\tcd\tde\n" |expand -t4
Ausgabe
ab cd de
Um die Tabulatoren als Tabulatoren beizubehalten und die Tabulator- STOP- Positionen auf jede vierte Spalte zu setzen, müssen Sie die Art und Weise ändern, in der die Umgebung mit Tabulatoren arbeitet (genau wie bei vim mit dem :set ts=4
Befehl).
Beispielsweise können Sie im Terminal mit diesem Befehl die Registerkarte STOP auf 4 setzen.
tabs 4; printf "ab\tcd\tde\n"
Ausgabe
ab cd de
expand
(from coreutils package) undtabs
(from ncurses package), (2). und die Bedeutung von ts ist [ T ] ab [ S ] topVerwenden Sie einfach den folgenden Code:
Wobei n die Anzahl der Leerzeichen ist, denen auch Tabulatoren entsprechen sollen. Um dies nicht jedes Mal tun zu müssen, wenn Sie die Shell starten, bearbeiten Sie einfach Ihr
.bash_profile
in~/
und fügen Sie die obige Zeile am Ende der Datei hinzu.Weitere Informationen zum Befehl tabs finden Sie unter:
quelle
ls
durcheinander bringen kann (z. B. dass die Ausgabe möglicherweise nicht richtig ausgerichtet ist).Es gibt keine Vorstellung von Tabulatoren oder Tabulatorenstopps
cat
; Das Programm fügt nur die Eingaben in die Ausgabe ein und behandelt Registerkarten wie jedes andere Zeichen. Handelt es sich bei dem Ausgabegerät um ein Terminal, werden die Registerkarten entsprechend dem Verhalten behandelt, für das das Terminal konfiguriert ist.Systeme, die POSIX.1 implementieren, verfügen über einen Befehl
tabs(1)
, mit dem das Konzept des Terminals für die Anzeige von Registerkarten angepasst wird. Abhängig von einem bestimmten Registerkartenlayout ist dies keine gute Idee, da Ihre Datei möglicherweise an ein anderes Gerät gesendet wird, z. B. an einen Drucker, der nicht das tut, was Sie beabsichtigt haben.Wenn Sie
ts
invim
(oder normalvi
) anpassen , müssen Sie nur anpassen, wie der Editor Tabulatorzeichen interpretiert, wenn sie angezeigt werden. Es hat keinen Einfluss darauf, was in der Datei endet.quelle
Basierend auf den obigen Antworten und Beispielen scheint es, dass der tatsächliche Befehl, den das OP wollte, ...
cat somefile | expand -t4
Dies funktioniert für mich unter Red Hat 6.4.
quelle
Um die bereits gegebenen Antworten zu erweitern,
expand
kann auch eine Liste von Tabulatorpositionen eingenommen werden. Dies ist nützlich, wenn die Inhaltslängen der verschiedenen Spalten sehr unterschiedlich sind.Ich bin heute auf diese Anforderung gestoßen, als ich die Ausgabe von
openssl ciphers
lesbarer machen wollte :Wenn Sie nur verwenden
expand -t31
, wird die Breite der Ausgabe von ca. 100 Zeichen auf über 160 Zeichen erhöht.quelle
column
:openssl ciphers -v 'HIGH' | column -t
Viele Terminals unterstützen das Einstellen variabler Tabstopps. Diejenigen, die vt100, Linux und / oder den EMCA-48-Standard unterstützen, tun dies, die meisten Begriffe in Bezug auf die Größe der Registerkarte für die Linux-Unterstützung: xterm und family (uxterm, urxvt) xfce4-terminal, luit, Terminal, SecureTTY, unter anderem.
Also schrieb ich vor ein paar Jahren ein Skript, um meine Tabs bei der Anmeldung auf 2 Leerzeichen zu setzen.
Wenn ich jetzt eine Datei 'cat', werden die Registerkarten in der Datei auf die Einstellungen meines Terminals erweitert.
Wenn ich durch vim oder mehr gekommen bin, haben sie ihre eigene Tab-Erweiterung, aber viele Utils verwenden Tabs.
Enthält das Skript hier als Referenz und für den persönlichen Gebrauch:
Ich hoffe es hilft...
quelle
Laut der Manpage kann cat das nicht alleine machen. Sie können jedoch z. B. die Ausgabe von cat durch
tr
filter ausführen , um die Tabulatoren durch eine beliebige Anzahl von Leerzeichen zu ersetzen:wird das Tabulatorzeichen durch zwei Leerzeichen ersetzen.
Update: Wie in den Kommentaren zu diesem Beitrag erwähnt, funktioniert dies tatsächlich nicht . Trotzdem behalte ich die Antwort als Beispiel dafür, wie man es nicht macht.
quelle
'\t'
nur ein Leerzeichen ersetzt, egal wie viele Leerzeichen zwischen dem zweiten Paar von Anführungszeichen stehen' '
tr
funktioniert so nicht .. jedes Byte von arg 1 wird durch jedes entsprechende Byte von arg 2 ersetzt ..... Gibt daherprintf '\t' |tr '\t' 'ळ'
ein einzelnes Byte aus, dessen hexadezimaler Wert\xE0
.. ist und das das erste Byte der drei UTF-8 ist codierte Bytes, aus denen das Zeichen bestehtळ
(deren Unicode-CodePoint-Wert U + 0933 ist)