Tách dòng từ rất dài thành các dòng riêng biệt có độ dài tối đa


18

Tôi có một tập lệnh xuất ra một danh sách các gói trên một dòng dài được phân tách bằng dấu cách. Thông tin trong dòng này sẽ được chèn vào một tệp văn bản mà sau đó được trình bày cho người dùng.

Tôi muốn chia dòng dài thành nhiều dòng với độ dài tối đa xác định, ví dụ 80 ký tự, nhưng việc phân tách chỉ xảy ra ở các khoảng trắng (vì vậy một số dòng có thể ngắn hơn nếu không có khoảng trắng sau chính xác 80 ký tự và phần tử tiếp theo sẽ tạo nó dài hơn).

Trường hợp một mục nhập dài hơn 80 ký tự có thể sẽ không bao giờ xảy ra và tôi không quan tâm nếu mục này được chia ra ở giữa hoặc kết quả trong một dòng dài hơn.

Về cơ bản, nó giống như hầu hết các trình soạn thảo văn bản làm khi tự động gói được chọn nhưng tôi muốn thực hiện nó từ một tập lệnh shell.

Ví dụ đầu vào:

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

Đầu ra ví dụ mong muốn:

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

Câu trả lời:


30

Những gì bạn muốn làm fold:

fold -s -w80 file
  • -s: nói foldchỉ phá vỡ tại không gian
  • -w80: khai báo chiều rộng
  • fold: cũng đọc từ stdin: echo "..." | fold -s -w80

1
Hoàn hảo, cảm ơn rất nhiều. Tôi chắc chắn rằng phải có một lệnh đơn giản nhưng tôi chưa bao giờ nghe về nếp gấp.
Tháng Một

Cảm ơn bạn. Bằng cách nào đó, tôi không lưu được đầu ra vào một tệp khi sử dụng lần.
dùng1323995
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.