2009-10-23 7 views

Antwort

19

Beachten Sie, dass cut einen Dateinamen als Argument akzeptiert.

Dies scheint für mich zu arbeiten:

watch 'bash -c "cut -c -$COLUMNS file"' 

Zum Testen habe ich einen rechten Rand hinzugefügt:

watch 'bash -c "cut -c -$(($COLUMNS-10)) file"' 

Wenn ich meinen Terminal Größe verändert wurde die Verkürzung anzupassen aktualisiert.

+0

Wenn ich Ihr Skript 'watch./colscript' starte, wird 80 angezeigt. Wenn ich die Breite ändere, indem ich den Rand des Fensters ziehe (ich benutze PuTTY), ändert sich die Zahl entsprechend. Was siehst du? –

+0

Ich sehe nichts, aber ich habe herausgefunden warum: verschiedene Bash-Versionen. Uhr ./colscript funktioniert auf Bash 4.0 (mein Computer), aber nicht auf Bash 3.0 (ein Remote-Computer). ./colscript funktioniert bei keiner der beiden Versionen. – Alexandru

+0

'echo $ BASH_VERSION' gibt mir" 3.2.48 (1) -release "Der Grund dafür, dass'./Colscript' von der Kommandozeile eine Leerzeile enthält, ist, dass '$ COLUMNS' nur für interaktive Shells gefüllt wird. Sie können versuchen, '-i' am Ende der ersten Zeile von' ./colscript' hinzuzufügen, damit Sie '#!/Bin/bash -i' haben –

34

Sie können für fmt suchen:

fmt file 

Diese ziemlich aggressiv Ihren Text umformatiert, so kann es mehr tun, als das, was Sie wollen.

Alternativ kann der cut Befehl kann Text auf eine bestimmte Spalte Breite geschnitten, Text über den rechten Rand zu verwerfen:

cat file | cut -c1-80 

Eine weitere praktische Option ist der less -S Befehl, der eine Datei in einem Vollbild-Fenster zeigt mit links/rechts für lange Linien Scrollen:

less -S file 
+0

der Tat tut es mehr als ich will: es verkettet Linien. – Alexandru

+0

Eigentlich schaue ich den Inhalt der Datei mit Watch "Cat-Datei", so dass ich nicht weniger verwenden kann. Katzendatei | cut -c1-80 hat es teilweise geschafft. Irgendeine Möglichkeit, den Schnitt an die Bildschirmgröße anzupassen? – Alexandru

+2

Sie können die Umgebungsvariable '$ COLUMNS' definiert haben: try ' cut -c1- $ COLUMNS file' – mob

5

wie bereits von anderen erwähnt, ist die Antwort cut -c ..., aber einige dynamische, um es hinzuzufügen, ziehe ich diese:

cat file.txt |cut -c -$(tput cols)

2

umschalten Long-Line-wrap in weniger. Standard ist das Umbrechen.

- `less file` 
- in file type `"-S"` to toggle to truncate on line width 
- to toggle back `"-S"` again. 
+0

Sie können auch' less' mit '-S' als Option aufrufen : 'less -S file' oder in die Umgebung einbinden:' export LESS = "- S" '(plus andere Optionen). In beiden Fällen können Sie den Toggle immer noch verwenden, wenn Sie möchten. –

1

Die Verwendung von cut findet nicht berücksichtigt, dass Laschen \t ein einzelnes Zeichen betrachtet werden, sondern sie werden als 8 Leerzeichen gedruckt. So wird eine Datei mit Tabs an verschiedenen wahrgenommenen Spalten abgeschnitten.

less -S schneidet den Text optimal ab, auch in der Anwesenheit von Registerkarten, aber AFAIK kann nicht verwendet werden, um nicht interaktiv die "gehackte" Datei zu drucken.

Eine Arbeitslösung ist Tabs in die Räume durch expand und dann cut die Ausgabe zu konvertieren: expand < file | cut -c -$(tput cols)

+0

'expand' ist eine große Hilfe; Danke, ich habe gerade mit diesem Problem gerungen (mit Tabs). Froh bin ich auf den Grund gescrollt! – Lambart