Membagi baris kata yang sangat panjang menjadi baris terpisah dengan panjang maks


18

Saya memiliki skrip yang menampilkan daftar paket pada satu garis panjang yang dipisahkan oleh spasi. Informasi yang termasuk dalam baris ini harus dimasukkan ke dalam file teks yang kemudian disajikan kepada pengguna.

Saya ingin membagi garis panjang menjadi beberapa garis dengan panjang maksimum yang ditentukan, misalnya 80 karakter, tetapi pemisahan harus terjadi hanya pada spasi (jadi beberapa garis mungkin lebih pendek jika tidak ada spasi setelah tepat 80 karakter dan elemen berikutnya akan membuat lebih lama).

Kasus di mana satu entri lebih panjang dari 80 karakter mungkin tidak akan pernah terjadi dan saya tidak peduli jika entri ini terpecah di tengah atau menghasilkan garis yang lebih panjang.

Pada dasarnya, itu sama dengan apa yang dilakukan sebagian besar editor teks ketika pembungkus otomatis dipilih tetapi saya ingin melakukannya dari skrip shell.

Input Contoh:

libkrb5-3 libk5crypto3 openssh-server libc-bin base-files sysvinit-utils bind9-host python-minimal python-reportbug dnsutils perl libgnutls-openssl27 mutt reportbug libdns88 perl-base whois bash libgnutls26 perl-modules libapt-inst1.5 python2.7 libexpat1 libisccc80 libgssrpc4 apt-utils procmail apt locales liblwres80 libkrb5support0 python openssh-client multiarch-support libgcrypt11 dpkg libxml2 libbind9-80 wget libapt-pkg4.12 file ssh libkadm5clnt-mit8 libisccfg82 libkadm5srv-mit8 tzdata gpgv krb5-locales python2.7-minimal libgpgme11 openssl rsyslog libkdb5-6 host sysv-rc libgssapi-krb5-2 libisc84 libc6 initscripts sysvinit libmagic1 libssl1.0.0 gnupg

Output contoh yang diinginkan:

libkrb5-3 libk5crypto3 openssh-server libc-bin base-files sysvinit-utils
bind9-host python-minimal python-reportbug dnsutils perl libgnutls-openssl27
mutt reportbug libdns88 perl-base whois bash libgnutls26 perl-modules
libapt-inst1.5 python2.7 libexpat1 libisccc80 libgssrpc4 apt-utils procmail apt
locales liblwres80 libkrb5support0 python openssh-client multiarch-support
libgcrypt11 dpkg libxml2 libbind9-80 wget libapt-pkg4.12 file ssh
libkadm5clnt-mit8 libisccfg82 libkadm5srv-mit8 tzdata gpgv krb5-locales
python2.7-minimal libgpgme11 openssl rsyslog libkdb5-6 host sysv-rc
libgssapi-krb5-2 libisc84 libc6 initscripts sysvinit libmagic1 libssl1.0.0 gnupg

Jawaban:


30

Apa yang Anda inginkan fold:

fold -s -w80 file
  • -s: memberitahu folduntuk istirahat hanya pada spasi
  • -w80: menyatakan lebar
  • fold: juga membaca dari stdin: echo "..." | fold -s -w80

1
Sempurna, terima kasih banyak. Saya yakin bahwa harus ada perintah sederhana tetapi saya tidak pernah mendengar lipatan.
Januari

Terima kasih. Entah bagaimana, saya gagal menyimpan output ke file saat menggunakan flip.
user1323995
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.