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?


"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! > _ <


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.


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.


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.