Di Linux, bagaimana cara memotong output baris perintah?

56

Jika saya grep -nr sumthin *di direktori kode sumber saya, itu juga memunculkan garis yang sangat panjang dari file JavaScript atau CSS yang diperkecil. Saya ingin mendapatkan 80 karakter pertama per baris.

Misalnya, seorang reguler grepmemberi saya ini:

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.

tapi saya ingin mendapatkan ini saja:

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

Apa perintah Linux yang bisa melakukan ini?

Nikki Erwin Ramirez
sumber
"diperkecil"? Apa artinya?
CarlF
Terima kasih. Tautan yang benar adalah en.wikipedia.org/wiki/Minification_%28programming%29
CarlF
Kedua tautan mengarah ke halaman yang sama untuk saya.
Victor

Jawaban:

80

OMG, aku benar-benar lupa cut!

grep -nr sumthin * | cut -c -80

^ lakukan triknya! > _ <

Nikki Erwin Ramirez
sumber
4
Itu tidak akan berhasil jika sekuens melarikan diri atau kode warna terlibat; ambil contohgit log --oneline --graph --color=always | cut -c -$COLUMNS
badp
1
Saya mendapatkan bahwa itu tidak memotong tepat 80 karakter yang ditampilkan, tetapi masih memecahkan masalah saya: tidak ada garis yang membungkus, jadi Anda masih hanya melihat bagian terkemuka dari setiap baris (yang penting dalam kasus penggunaan khusus saya, jadi saya dapat melihat <file>:<linenumber>output dari grep -n).
Nikki Erwin Ramirez
1
Komit panjang komentar juga agak "istirahat" output perintah sampel Anda, jika tidak terpotong. git log --oneline --graph --color=always | moreakan menampilkan grafik yang terputus oleh teks yang dibungkus. i.imgur.com/X8G7SIV.png
Nikki Erwin Ramirez
ya, itu sebabnya saya mencari pertanyaan ini di
google
5
Jika tujuannya hanya untuk dapat melihat hal-hal dengan baik secara visual (tidak mengarahkan output ke suatu tempat untuk digunakan) maka less -Situlah yang Anda inginkan. -Sadalah --chop-long-lines. Pada dasarnya, ini mematikan pembungkus baris
entropi
5

Selain cutyang dapat Anda gunakan fold(dan dalam beberapa kasus fmt).
foldadalah bagian dari coreutilspaket.

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

foldtidak memotong teks yang tersisa, tetapi menampilkannya di baris berikutnya.

Ivan c00kiemon5ter V Kanak
sumber
Terima kasih untuk ini, ini mungkin berguna di masa depan. Dalam kasus saya, saya benar-benar ingin memotong teks, sehingga file:linenumberawalan grepoutput berdekatan, untuk memudahkan pemindaian dengan mata.
Nikki Erwin Ramirez
1

Meskipun tidak persis apa yang ingin Anda lakukan, Anda dapat menggunakannya awkuntuk mencetak sejumlah kolom. Anda dapat menentukan pembatas menjadi ":" dalam kasus ini.

Sardathrion
sumber
Tidak ada pembatas khusus. Saya benar-benar memotong output pada panjang tertentu, agar sesuai dalam 1 baris di terminal.
Nikki Erwin Ramirez
@Nikki lalu potong adalah apa yang kamu inginkan. Saya yakin Anda bisa melakukan sesuatu yang cerdik dengan awk untuk mendapatkan hal yang sama tetapi sebenarnya, memotong lebih mudah. ^ _-
Sardathrion