หากคุณต้องการบีบ "ช่องว่างสีขาว" คุณจะต้องใช้ชุดอักขระที่กำหนดไว้ล่วงหน้าของ tr ": blank:" (แท็บช่องว่างตามแนวนอนและช่องว่าง) หรือ ": space:" (ช่องว่าง verical):
/bin/echo -e "val1\t\tval2 val3" | tr -s "[:blank:]"
ตัวอย่างถูกเรียกใช้บน Red Hat 5 (GNU tr)
ในกรณีของฉันฉันต้องการทำให้ช่องว่างทั้งหมดเป็นปกติในพื้นที่เดียวดังนั้นฉันจึงสามารถพึ่งพาพื้นที่เป็นตัวส่ง
ตามที่ระบุไว้โดยความคิดเห็นที่สองของ dastrobu ฉันไม่ได้ใช้ถ้อยคำในหน้า man:
-s uses the last specified SET, and occurs after translation or deletion.
สิ่งนี้ทำให้เราสามารถกำจัด tr แรกได้ คูโดะต้องสกอตต์เพื่อความอดทนของเขาเมื่อเผชิญกับความหนาแน่นของฉัน
ก่อนทำการแยกวิเคราะห์พอร์ตจาก Redis config ไฟล์:
grep "^port" $redisconf | tr "[:blank:]" " " | tr -s "[:blank:]" | cut -d" " -f2
หลังจากนั้นเมื่อ SET2 ถูกระบุด้วยการบีบ:
grep "^port" $redisconf | tr -s "[:blank:]" " " | cut -d" " -f2
เอาท์พุท:
6379
สำหรับรายละเอียดเพิ่มเติมที่ครอบคลุมความแตกต่างของช่องว่าง
แสดงให้เห็นว่าการบีบตัวคนเดียวล้มเหลวเมื่อตัวละครผสมต่อเนื่องซึ่งตกอยู่ในคลาสตัวละคร [: blank:] เกี่ยวข้อง:
/usr/bin/printf '%s \t %s' id myname | tr -s "[:blank:]" | od -cb
0000000 i d \t m y n a m e
151 144 040 011 040 155 171 156 141 155 145
0000013
หมายเหตุ: สองฟิลด์สตริงของฉันในรูปแบบ printf คั่นด้วย 1 ช่องว่างแท็บ 1 ช่องว่าง 1 ช่อง หลังจากบีบลำดับนี้ยังคงมีอยู่ ในผลลัพธ์ของการดัมพ์ Octal สิ่งนี้แสดงโดยลำดับ ascii 040 011 040