sed -r 's/([^ .]+ [^ .]+) /\1\n/g' <<< "สุนัขจิ้งจอกเร็วกระโดดข้ามสุนัขขี้เกียจ"
อย่างรวดเร็ว
สุนัขจิ้งจอกกระโดด
มากกว่า
สุนัขขี้เกียจ
ชุดอักขระ [^ .]+
หมายถึงหนึ่งหรือมากกว่า +
ตัวละครใด ๆ .
ไม่รวม ^
ช่องว่าง ดังนั้นการจับกุมกลุ่ม ([^ .]+ [^ .]+)
ตรงกับรูปแบบเช่น สตริงสตริง
. นิพจน์ทั่วไปทั้งหมดมีช่องว่างเพิ่มเติมที่ส่วนท้าย ([^ .]+ [^ .]+)
(อาจรวมอยู่ในกลุ่มจับภาพเพื่อรักษาไว้)
กับ เสด
โดยใช้สิ่งทดแทน ส
คำสั่ง เราแทนที่รูปแบบที่ตรงกันด้วยเนื้อหาของกลุ่มจับภาพแรก \1
และขึ้นบรรทัดใหม่ \n
แทนช่องว่าง โดยธง ช
เราทำซ้ำคำสั่งจนจบแต่ละบรรทัด เดอะ -ร
ตัวเลือกเปิดใช้งานนิพจน์ทั่วไปแบบขยาย
อัปเดต - นี่คือคำตอบจริง:
sed -r 's/(.{8}) /\1\n/g' <<< "เราจะรู้ได้อย่างไรว่ามันจะตรงกับจำนวนอักขระที่กำหนดไว้ล่วงหน้า"
เราจะทำอย่างไร
รู้ว่ามันเป็น
กำลังจะ
ตรงกับ
กำหนดไว้ล่วงหน้า
จำนวน
ตัวอักษร?
ในตัวอย่างนี้ เราจับสตริงที่มีความยาวอย่างน้อย 8 อักขระ (รวมช่องว่าง) ตามด้วยช่องว่าง
เราสามารถตรวจสอบความยาวจริงของบรรทัดผลลัพธ์ได้ดังนี้:
sed -r 's/(.{8}) /\1\n/g' <<< "เราจะรู้ได้อย่างไรว่ามันจะตรงกับจำนวนอักขระที่กำหนดไว้ล่วงหน้า" \
| awk '{ความยาวการพิมพ์}'
9
10
8
9
11
9
11
และด้วยความช่วยเหลือของคำตอบของคำถาม จะใช้ printf เพื่อพิมพ์อักขระหลายครั้งได้อย่างไร [อ๊าก] เราสามารถบรรลุผลที่ต้องการได้
sed -r 's/(.{8}) /\1\n/g' <<< "เราจะรู้ได้อย่างไรว่ามันจะตรงกับจำนวนอักขระที่กำหนดไว้ล่วงหน้า" \
| awk '{ ส่วนที่เหลือ = (12 - ความยาว); printf "%s%s|\n", $0, substr(".........", 1, ที่เหลือ)}'
เราจะทำอย่างไร...|
รู้ไว้ใช่ว่า..|
จะไป....|
ตรงกับ...|
กำหนดไว้ล่วงหน้า|
จำนวน...|
ตัวอักษร?.|
ในกรณีที่คุณต้องการแยกคำ ให้ลบช่องว่างสุดท้ายออกจากนิพจน์ทั่วไปด้านบน /(.{8})/
. ต่อไปนี้คือตัวอย่างที่ความยาวบรรทัดสูงสุดจะเท่ากับ 10 อักขระหรือน้อยกว่า โดยที่ตัวที่สอง เสด
คำสั่งจะตัดแต่งช่องว่างรอบๆ แต่ละบรรทัดใหม่
sed -r 's/(.{10})/\1\n/g' <<< "เราจะรู้ได้อย่างไรว่ามันจะตรงกับจำนวนอักขระที่กำหนดไว้ล่วงหน้า" \
| sed -r 's/(^ | $)//g' \
| awk '{ ส่วนที่เหลือ = (10 - ความยาว); printf "%s%s|\n", $0, substr(".........", 1, ที่เหลือ)}'
เราจะทำอย่างไร|
รู้ว่ามันคือ|
จะไป..|
ตรงกับ.|
กำหนดล่วงหน้า|
d หมายเลข o|
ฉ ตัวอักษร|
อาร์เอส?.......|