Sed เพื่อลบช่องว่าง


28

ไม่มีใครรู้วิธีใช้ Sed เพื่อลบช่องว่างทั้งหมดในไฟล์ข้อความหรือไม่? ฉันยังพยายามใช้คำสั่ง "d" ลบเพื่อทำเช่นนั้น แต่ดูเหมือนจะไม่สามารถเข้าใจได้

คำตอบ:


35

"พื้นที่" แบบไหน

หากต้องการ "ลบช่องว่างทั้งหมด" อาจหมายถึงหนึ่งในสิ่งต่าง ๆ :

  1. 0x20ลบเกิดขึ้นทั้งหมดของตัวละครของพื้นที่รหัส
  2. ลบพื้นที่แนวนอนทั้งหมดรวมถึงอักขระแท็บแนวนอน " \t"
  3. ลบพื้นที่ว่างทั้งหมดรวมถึงบรรทัดใหม่ " \n" และอื่น ๆ

เครื่องมือที่เหมาะสมสำหรับงาน

หากsedไม่ใช่ความต้องการด้วยเหตุผลที่ซ่อนอยู่ให้ใช้เครื่องมือที่เหมาะสมสำหรับงาน

คำสั่งtrมีการใช้งานหลักในการแปล (ดังนั้นชื่อ "tr") รายการของตัวละครไปยังรายการของตัวละครอื่น ๆ ในมุมกรณีมันสามารถแปลเป็นรายการของตัวละครที่ว่างเปล่า; ตัวเลือก-d( --delete) จะลบตัวอักษรที่ปรากฏในรายการ

รายการอักขระสามารถใช้ประโยชน์จากคลาสอักขระใน[:...:]ไวยากรณ์

  1. tr -d ' ' < input.txt > no-spaces.txt
  2. tr -d '[:blank:]' < input.txt > no-spaces.txt
  3. tr -d '[:space:]' < input.txt > no-spaces.txt

เมื่อยืนยันใน sed

ด้วย sed, [:...:]ไวยากรณ์สำหรับคลาสอักขระต้องรวมกับไวยากรณ์สำหรับชุดอักขระใน regexps [...]ทำให้เกิดความสับสนบ้าง[[:...:]]:

  1. sed 's/ //g' input.txt > no-spaces.txt
  2. sed 's/[[:blank:]]//g' input.txt > no-spaces.txt
  3. sed 's/[[:space:]]//g' input.txt > no-spaces.txt

1
เครื่องหมาย +1, POSIX สำหรับพื้นที่ว่างเป็นวิธีที่เหมาะสมในการไป
Avinash Raj

1
คำแนะนำที่ดีในการใช้ tr สำหรับงานนี้ใช้งานได้ดี สิ่งเดียวที่ฉันมีการปรับเป็น TR ที่อ่านข้อมูลจาก stdin tr -d ' ' < input.txt > no-spaces.txtดังนั้นสิ่งที่ทำงานสำหรับฉันคือ
Sky

ความคิดเห็นของ @ Sky ทำงานได้ใน macOS ของฉัน (ไม่ได้ทดสอบใน Linux) บางทีคำตอบควรได้รับการอัพเดต?
iplus26

ขอบคุณมาก @Sky นั่นเป็นข้อผิดพลาดที่ไม่ดีอย่างแน่นอน ฉันจะแก้ไขสามบรรทัดด้วยtrตอนนี้ (คุณเห็นมันจากที่อื่นไหม)
Volker Siegel

7

คุณสามารถใช้สิ่งนี้เพื่อลบช่องว่างทั้งหมดในfile:

 sed -i "s/ //g" file

2
ไม่มีลูกเต๋า ฉันได้ลองวิธีที่คล้ายกันด้วย ไม่ทำงาน
Justin

คุณต้องการที่จะลบช่องว่างหรือแท็บ?
Cyrus

1
ลบช่องว่าง
Justin

2
การทดสอบอย่างง่าย:man sed | sed "s/ //g"
Cyrus

1
@starscream_disco_party: มันเหมือนกัน คุณสามารถแทนที่ทั้ง 3 /ด้วยอักขระอื่นเช่น:sed "ss ssg"
Cyrus
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.