ฉันจะตัดข้อความด้วยขนาดคอลัมน์ที่แน่นอนได้อย่างไร


141

ฉันรู้ว่าฉันสามารถใช้บางสิ่งบางอย่างเช่นcat test.txt | pr -w 80การตัดบรรทัดที่มีความกว้าง 80 ตัวอักษร แต่นั่นทำให้มีพื้นที่เหลือเฟือที่ด้านบนและด้านล่างของบรรทัดที่พิมพ์ออกมาและมันไม่ทำงานในบางระบบ

อะไรคือวิธีที่ดีที่สุดในการบังคับให้ไฟล์ข้อความที่มีเส้นยาวถูกพันด้วยความกว้างที่กำหนด

คะแนนโบนัสหากคุณสามารถป้องกันไม่ให้ทำลายคำ

คำตอบ:


176

คุณกำลังมองหา

fold -w 80 -s text.txt
  • -w บอกความกว้างของข้อความโดยที่ 80 คือมาตรฐาน
  • -s บอกให้หยุดพักที่ช่องว่างไม่ใช่คำพูด

นี่เป็นวิธีมาตรฐานแต่มีระบบอื่นที่ต้องการ "-c" แทน "-w"


ทำงานบน OS X ได้เช่นกัน แต่ชื่อไฟล์ต้องอยู่หลัง args ขอบคุณ!
rdrey

2
ในด้านการจัดรูปแบบอีเมลสำหรับการตอบกลับข้อความเท่านั้นฉันใช้:fold -s -w 80 email.txt | sed 's/^.*$/> &/'
Marcello Romani

2
@MarcelloRomani คุณไม่ควรใช้ความกว้างของ 78 เนื่องจากคุณกำลังเตรียมอักขระสองตัวใช่หรือไม่
พี่เลี้ยง

1
อืม ... ข้าว่างั้น ขอขอบคุณสำหรับการชี้ว่า :)
Marcello โร

2
โปรดทราบว่าfoldแบ่ง URL ในขณะที่fmtไม่
Skippy le Grand Gourou

51

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


3
ฉันชอบ fmt -t โดยเฉพาะอย่างยิ่งเมื่อเทียบกับ fold
lkraav

15

1) รับประกันความกว้างของบรรทัดที่แน่นอนด้วยการแบ่งคำ:

fold -w 80 <text.txt

2) ความกว้างของบรรทัดที่แน่นอนที่มีการแบ่งคำที่ไม่ธรรมดา (คำจะแตกถ้าหากมันใหญ่เกินไปที่จะใส่ในบรรทัด):

fold -sw 80 <text.txt

3) ความกว้างของบรรทัดคงที่ที่มีแนวโน้มโดยไม่มีการแบ่งคำใด ๆ (ถ้าคำมีขนาดใหญ่เกินกว่าที่จะพอดีในบรรทัดมันจะยังคงอยู่เหมือนเดิมดังนั้นในที่สุดบางบรรทัดอาจมีขนาดใหญ่กว่าที่คุณต้องการ):

fmt -w 80 <text.txt

คำตอบที่ไม่ถูกต้อง พร้อมใช้งานบนระบบส่วนใหญ่ ทำได้ดีนี่.
Merc

11

เครื่องมือ (ที่รู้จักน้อยกว่า) อีกอย่างที่ทำในสิ่งที่คุณต้องการคือwrapจาก GNU Talkfilters :

wrap -w 80 < textfile

นอกจากนี้ (ปิดหัวข้อ):

แต่นั่นทำให้มีพื้นที่จำนวนมากที่ด้านบนและด้านล่างของบรรทัดที่พิมพ์

เพิ่ม-tเมื่อเรียกใช้prเพื่อละเว้นส่วนหัว / ตัวอย่าง:

   -t, --omit-header
          omit page headers and trailers

5

และสำหรับตัวเลือกการจัดรูปแบบเพิ่มเติมดูที่par- http://www.nicemice.net/par/


2
ขณะนี้เว็บไซต์ไม่ทำงานมี Internet Archive และแคชของ Google แต่นี่แสดงให้เห็นว่าเหตุใดจึงเป็นสิ่งสำคัญที่จะโพสต์มากกว่าการเชื่อมโยงคุณอาจมีตัวอย่างอย่างน้อยโพสต์จากเอกสารอย่างเป็นทางการ
phk

-1
fold -w 100 -s text.txt

ทำงานให้ฉันได้เพราะฉันต้องแยกทุกบรรทัดจนถึง 100 ตัวอักษร


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