Wie schneide ich unter Linux die Befehlszeilenausgabe ab?

56

Wenn ich mich grep -nr sumthin *in meinem Quellcodeverzeichnis befinde, werden auch sehr lange Zeilen aus minimierten JavaScript- oder CSS-Dateien ausgegeben. Ich möchte nur die ersten 80 Zeichen pro Zeile erhalten.

Ein Stammgast grepgibt mir zum Beispiel Folgendes:

css/style.css:21:   behavior: url("css/iepngfix.htc")
css/style-min.css:4:.arrow1{cursor:pointer;position:absolute;left:5px;bottom:10px;z-index:13;}.arrow2{cursor:pointer;position:absolute;right:5px;bottom:10px;z-index:13;}.calendarModule{z-index:100;}.calendarFooterContainer{height:25px;text-align:center;width:100%!important;z-index:15;position:relative;font-size:15px!important;padding:-2px 0 3px 0;clear:both!important;border-left:1px solid #CCC;border-right:1px  ... etc.

aber ich möchte stattdessen genau das bekommen:

css/style.css:21:   behavior: url("css/iepngfix.htc")
css/style-min.css:4:.arrow1{cursor:pointer;position:absolute;left:5px;bottom:

Welcher Linux-Befehl kann das?

Nikki Erwin Ramirez
quelle
"minimiert"? Was bedeutet das?
CarlF
Vielen Dank. Der richtige Link lautet en.wikipedia.org/wiki/Minification_%28programming%29
CarlF
Beide Links führen für mich auf die gleiche Seite.
Victor

Antworten:

80

OMG, das habe ich total vergessen cut!

grep -nr sumthin * | cut -c -80

^ macht den Trick! > _ <

Nikki Erwin Ramirez
quelle
4
Das funktioniert nicht, wenn Escape-Sequenzen oder Farbcodes beteiligt sind. nehmen Sie zum Beispielgit log --oneline --graph --color=always | cut -c -$COLUMNS
badp
1
Ich habe festgestellt, dass es bei genau 80 angezeigten Zeichen nicht abgeschnitten wird, aber dennoch mein Problem gelöst wird: Keine der Zeilen wird umbrochen, sodass Sie immer noch nur den führenden Teil jeder Zeile sehen (was in meinem speziellen Anwendungsfall wichtig ist, also ich kann die <file>:<linenumber>Ausgabe von grep -n) sehen.
Nikki Erwin Ramirez
1
Lange Festschreibungskommentare unterbrechen auch die Ausgabe Ihres Beispielbefehls, wenn sie nicht abgeschnitten werden. git log --oneline --graph --color=always | morezeigt das Diagramm, das durch umbrochenen Text unterbrochen ist. i.imgur.com/X8G7SIV.png
Nikki Erwin Ramirez
Ja, deshalb habe ich diese Frage von Anfang an
gegoogelt
5
Wenn es nur darum geht, die Dinge visuell gut zu sehen (die Ausgabe nicht zur Verwendung umzuleiten), less -Sist es das, was Sie wollen. -Sist --chop-long-lines. Grundsätzlich wird der Zeilenumbruch deaktiviert
Entropie
5

Andere als cutSie verwenden können fold(und in einigen Fällen fmt).
foldist Teil des coreutilsPakets.

$ echo "some very long long long text" | fold -w 5   # fold on 5 chars per line
some 
very 
long 
long 
long 
text

foldnicht schneidet den restlichen Text, sondern gibt es in der nächsten Zeile.

Ivan c00kiemon5ter V Kanak
quelle
Vielen Dank dafür, dies könnte in Zukunft nützlich sein. In meinem Fall wollte ich den Text unbedingt ausschneiden, damit das file:linenumberPräfix der grepAusgabe für ein einfaches Scannen mit dem Auge zusammenhängend ist.
Nikki Erwin Ramirez
1

Obwohl dies nicht genau das ist, was Sie tun möchten, können Sie awkeine bestimmte Anzahl von Spalten drucken. In diesem Fall können Sie als Trennzeichen ":" angeben.

Sardathrion
quelle
Es gibt jedoch kein bestimmtes Trennzeichen. Ich schneide die Ausgabe wirklich auf eine bestimmte Länge, damit sie in eine Zeile im Terminal passt.
Nikki Erwin Ramirez
@Nikki dann schneide was du willst. Ich bin mir sicher, dass Sie mit awk etwas Kluges machen können, um das Gleiche zu erreichen, aber wirklich, der Schnitt ist einfacher. ^ _-
Sardathrion