Sed แทนที่ Newline ด้วย Space

Sed Thaenthi Newline Dwy Space



ใน UNIX/Linux คำสั่ง sed เป็นเครื่องมือเฉพาะสำหรับการแก้ไขสตรีม สามารถดำเนินการต่างๆ บนสตรีมข้อความ เช่น การค้นหา การค้นหาและการแทนที่ และการแทรก/การลบ อย่างไรก็ตาม ส่วนใหญ่แล้ว sed จะใช้เพื่อค้นหาและแทนที่เนื้อหาข้อความ

ในคู่มือนี้ เราจะแสดงการแทนที่บรรทัดใหม่ด้วยช่องว่างโดยใช้ sed

ใช้ sed แทน Text

ขั้นแรก มาดูการดำเนินการค้นหาพื้นฐานและแทนที่โดยใช้ sed อย่างรวดเร็ว วิธีการเดียวกันนี้จะใช้เมื่อแทนที่การขึ้นบรรทัดใหม่ด้วยช่องว่างด้วยตัวเลือกเพิ่มเติม โครงสร้างคำสั่งมีดังนี้:







$ sed -e 's///'

ดูคำสั่งต่อไปนี้:



$ echo 'สุนัขจิ้งจอกสีน้ำตาลเร็ว' | sed -e 's/รวดเร็ว/เร็ว/g'



คำสั่ง echo พิมพ์สตริงไปที่ STDOUT . สตรีม STDOUT นั้นคือ ท่อ ที่จะ sed เราได้สั่งให้ sed แทนที่อินสแตนซ์ของ quick เพื่อแทนที่ด้วย fast ในที่สุด ผลลัพธ์จะถูกพิมพ์บนหน้าจอ





การแทนที่บรรทัดใหม่ด้วย Space

สำหรับการสาธิต ฉันได้สร้างไฟล์ข้อความ test.txt ต่อไปนี้โดยมีเนื้อหาจำลองหลายอย่าง:

$ cat test.txt



คำสั่ง sed ยอมรับนิพจน์ทั่วไปเพื่ออธิบายรูปแบบต่างๆ ใช้ประโยชน์จากคุณลักษณะนี้ เราจะอธิบายการขึ้นบรรทัดใหม่ว่า \n ลองแทนที่บรรทัดใหม่ด้วยช่องว่าง:

$ sed -e 's/\n/ /g' test.txt

อย่างไรก็ตามนั่นไม่ได้ผลตามที่คาดไว้ เพื่อให้บรรลุเป้าหมายนี้ เราต้องการตัวเลือกเพิ่มเติม ดูคำสั่งต่อไปนี้:

$ sed -e ':a;N;$!ba;s/\n/ /g' test.txt

คำสั่ง sed มีหลายส่วน แต่ละอันแสดงถึงงานเฉพาะ:

  • :a: สร้างป้ายกำกับ 'a'
  • N: ต่อท้ายบรรทัดถัดไปกับช่องว่างรูปแบบ
  • $!ba: หากไม่ใช่บรรทัดสุดท้าย ให้กลับไปที่ป้ายกำกับ 'a'
  • s/\n/ /g: ค้นหาและแทนที่บรรทัดใหม่ (\n) ด้วยช่องว่าง (/ /) รูปแบบจะถูกจับคู่ทั่วโลก (/g)

คำสั่ง sed จะวนซ้ำตามขั้นตอนต่างๆ จนกว่าจะถึงบรรทัดสุดท้าย โดยแทนที่อักขระ \n ทั้งหมดด้วยช่องว่าง

แทนที่จะใช้คำสั่งที่ซับซ้อนนี้ เราสามารถทำให้สิ่งต่าง ๆ ง่ายขึ้นโดยใช้แฟล็ก -z ที่ระบุ sed เพื่อทำงานกับเร็กคอร์ดที่คั่นด้วยค่า null คำสั่งจะมีลักษณะดังนี้:

$ sed -z -e 's/\n/ /g' test.txt

วิธีทางเลือก

แม้ว่า sed จะทำงานได้ดี แต่ก็มีเครื่องมืออื่นอยู่บ้าง ในส่วนนี้ เราจะตรวจสอบสองสามข้อโดยสังเขป

สำหรับตัวอย่างต่อไปนี้ เราสามารถใช้คำสั่ง tr เพื่อแทนที่บรรทัดใหม่ด้วยช่องว่างในลักษณะง่ายๆ:

$ tr '\n' ' ' < test.txt

นอกจากนี้เรายังสามารถใช้ Perl เพื่อทำงาน ไวยากรณ์ต่อไปนี้ก็คล้ายกับสิ่งที่เราใช้กับ sed (แต่ทำให้ง่ายขึ้น):

$ perl -p -e 's/\n/ /' test.txt

อีกวิธีในการแทนที่บรรทัดใหม่ด้วยช่องว่างคือการใช้คำสั่งวาง โปรดทราบว่าสามารถลบอักขระได้เพียงตัวเดียวเท่านั้น:

$ paste -s -d ' ' test.txt

คล้ายกับ sed ลินุกซ์มาพร้อมกับเครื่องมืออื่น awk เช่นเดียวกับ sed มันสามารถทำการแทนที่ขั้นสูงบางอย่างกับอินพุตได้ สำหรับจุดประสงค์ของเรา ให้ใช้คำสั่ง awk ต่อไปนี้:

$ awk 1 ORS=' ' test.txt

บทสรุป

คู่มือนี้สำรวจวิธีที่เราสามารถแทนที่การขึ้นบรรทัดใหม่ด้วยช่องว่างโดยใช้ sed มันประสบความสำเร็จในสองวิธีที่แตกต่างกัน คู่มือนี้ยังรวมถึงเครื่องมือที่เกี่ยวข้องอื่นๆ ที่เราสามารถใช้แทนที่บรรทัดใหม่ด้วยช่องว่าง

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