In Linux, come posso troncare l'output della riga di comando?


56

Se io grep -nr sumthin *nella mia directory del codice sorgente, emette anche righe molto lunghe da file JavaScript o CSS minimizzati. Voglio ottenere solo i primi 80 caratteri per riga.

Ad esempio, un normale grepmi dà questo:

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.

ma mi piacerebbe ottenere questo, invece:

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

Quale comando Linux può fare questo?


"minified"? Cosa significa?
CarlF,



Entrambi i link portano alla stessa pagina per me.
Victor,

Risposte:


80

OMG, mi ero completamente dimenticato cut!

grep -nr sumthin * | cut -c -80

^ fa il trucco! > _ <


3
Ciò non funziona se sono coinvolte sequenze di escape o codici colore; prendiamo ad esempiogit log --oneline --graph --color=always | cut -c -$COLUMNS
badp

1
Capisco che non si tronca esattamente a 80 caratteri visualizzati, ma risolve ancora il mio problema: nessuna delle linee si avvolge, quindi vedi ancora solo la parte iniziale di ogni riga (che è importante nel mio caso d'uso specifico, quindi io può vedere l' <file>:<linenumber>output di grep -n).
Nikki Erwin Ramirez,

1
I commenti di commit lunghi possono anche "interrompere" l'output del comando di esempio, se non troncato. git log --oneline --graph --color=always | moremostrerà il grafico interrotto dal testo a capo. i.imgur.com/X8G7SIV.png
Nikki Erwin Ramirez,

sì, è per questo che ho
cercato su Google

5
Se lo scopo è solo quello di essere in grado di vedere visivamente bene le cose (non reindirizzare l'output da qualche parte per l'uso), allora less -Sè quello che vuoi. -Slo è --chop-long-lines. Fondamentalmente, disattiva il ritorno a capo
entropia

5

Oltre a quello cutche puoi usare fold(e in alcuni casi fmt).
foldfa parte del coreutilspacchetto.

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

foldnon taglia il testo rimanente, ma lo emette sulla riga successiva.


Grazie per questo, questo potrebbe essere utile in futuro. Nel mio caso, volevo davvero tagliare il testo, quindi il file:linenumberprefisso grepdell'output è contiguo, per una facile scansione ad occhio.
Nikki Erwin Ramirez,

1

Anche se non è esattamente quello che vuoi fare, puoi usare awkper stampare un certo numero di colonne. È possibile specificare il delimitatore come ":" in questo caso.


Tuttavia, non esiste un delimitatore specifico. Sto davvero tagliando l'output a una lunghezza specifica, per adattarlo a 1 riga nel terminale.
Nikki Erwin Ramirez,

@Nikki quindi tagliare è quello che vuoi. Sono sicuro che puoi fare qualcosa di intelligente con awk per ottenere la stessa cosa, ma davvero, tagliare è più facile. ^ _-
Sardathrion
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.