ฉันจะจับคู่ whitespace ใน sed ได้อย่างไร ในข้อมูลของฉันฉันต้องการจับคู่ช่องว่างที่ตามมาทั้งหมด 3 ตัว (ช่องว่างแท็บ) และแทนที่ด้วยช่องว่าง 2 ช่อง สิ่งนี้สามารถทำได้?
ฉันจะจับคู่ whitespace ใน sed ได้อย่างไร ในข้อมูลของฉันฉันต้องการจับคู่ช่องว่างที่ตามมาทั้งหมด 3 ตัว (ช่องว่างแท็บ) และแทนที่ด้วยช่องว่าง 2 ช่อง สิ่งนี้สามารถทำได้?
คำตอบ:
ชั้นเรียนตัวอักษร\s
จะตรงกับตัวละครช่องว่างและ<tab>
<space>
ตัวอย่างเช่น:
$ sed -e "s/\s\{3,\}/ /g" inputFile
จะแทนที่ทุกลำดับอย่างน้อย 3 ช่องว่างด้วยสองช่องว่าง
หมายเหตุ : สำหรับการปฏิบัติตาม POSIX ให้ใช้คลาสตัวอักษร[[:space:]]
แทน\s
เนื่องจากตัวต่อท้ายเป็นส่วนขยายของ GNU sed ดูข้อมูลจำเพาะ POSIX สำหรับsedและBRE
[[:space:]
อย่างใดอย่างหนึ่งก็สามารถใช้[[:blank:]]
ซึ่งจะจับคู่แท็บแนวนอนและช่องว่างเท่านั้น (แต่ไม่มีบรรทัดใหม่แท็บแนวตั้ง ฯลฯ )
ใช้งานได้กับ MacOS 10.8:
sed -E "s/[[:space:]]+/ /g"
sed "s/[[:space:]]\+/ /g"
จับคู่หนึ่งช่องว่างหรือมากกว่า
-E
ตั้งค่าสถานะเช่นกัน
sed รุ่นเก่าบางรุ่นอาจไม่รู้จัก \ s เป็นโทเค็น white space ที่ตรงกับ ในกรณีนี้คุณสามารถจับคู่ลำดับของช่องว่างและแท็บอย่างน้อยหนึ่งรายการกับ '[XZ] [XZ] *' โดยที่ X คือช่องว่างและ Z คือแท็บ
sed 's/[ \t]*/"space or tab"/'
sed
กับระบบรุ่นใด ๆ ถ้าไม่ใช่มันอาจจะคุ้มค่าที่จะกล่าวถึงว่ามันทำงานอย่างไรในลักษณะเดียวกันกับคำตอบอื่น ๆ ดังนั้นเราจึงรู้ถึงข้อ จำกัด และตำแหน่งที่อาจไม่มีผลลัพธ์ตามที่ตั้งใจไว้