แยกคำที่ยาวมาก ๆ ออกเป็นเส้นยาวแยกกัน


18

ฉันมีสคริปต์ที่แสดงรายการแพ็กเกจบนบรรทัดยาวเดี่ยวคั่นด้วยช่องว่าง ข้อมูลที่รวมอยู่ในบรรทัดนี้จะถูกแทรกลงในไฟล์ข้อความซึ่งจะนำเสนอให้กับผู้ใช้ในภายหลัง

ฉันต้องการแยกบรรทัดยาวเป็นหลายบรรทัดด้วยความยาวสูงสุดที่กำหนดเช่น 80 อักขระ แต่การแบ่งควรเกิดขึ้นที่ช่องว่างเท่านั้น (ดังนั้นบางบรรทัดอาจสั้นกว่านี้หากไม่มีช่องว่างหลังจาก 80 ตัวอักษรและองค์ประกอบถัดไปจะทำให้ มันอีกต่อไป)

กรณีที่รายการเดียวที่มีความยาวมากกว่า 80 ตัวอักษรอาจไม่เกิดขึ้นและฉันไม่สนใจว่ารายการนี้แบ่งกลางหรือผลลัพธ์ในบรรทัดที่ยาวกว่าเดียว

โดยพื้นฐานแล้วมันเป็นสิ่งเดียวกับที่โปรแกรมแก้ไขข้อความส่วนใหญ่ทำเมื่อเลือกการตัดคำอัตโนมัติ แต่ฉันต้องการทำจากสคริปต์เชลล์

อินพุตตัวอย่าง:

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

เอาต์พุตตัวอย่างที่ต้องการ:

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

คำตอบ:


30

สิ่งที่คุณต้องการทำfold:

fold -s -w80 file
  • -s: บอกfoldให้แตกที่ช่องว่างเท่านั้น
  • -w80: ประกาศความกว้าง
  • fold: อ่านจาก stdin ด้วย: echo "..." | fold -s -w80

1
สมบูรณ์แบบขอบคุณมาก ฉันแน่ใจว่าจะต้องมีคำสั่งง่าย ๆ แต่ฉันไม่เคยได้ยินว่าพับ
ม.ค.

ขอขอบคุณ. อย่างใดฉันไม่สามารถบันทึกผลลัพธ์ไปยังไฟล์เมื่อใช้การพับ
user1323995
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.