วิธีที่ง่ายที่สุดในการแทนที่ช่องว่างสีขาวด้วย (ขีดล่าง) _ ใน bash [ปิด]


92

เมื่อเร็ว ๆ นี้ฉันต้องเขียนสคริปต์เล็กน้อยที่แยกวิเคราะห์ VM ใน XenServer และเนื่องจากชื่อของ VM ส่วนใหญ่มีช่องว่างสีขาวเช่น Windows XP หรือ Windows Server 2008 ฉันจึงต้องตัดช่องว่างสีขาวเหล่านั้นและแทนที่ด้วยเครื่องหมายขีดล่าง _ ฉันพบวิธีง่ายๆในการทำสิ่งนี้โดยใช้ sed ซึ่งเป็นเครื่องมือที่ยอดเยี่ยมเมื่อพูดถึงการจัดการสตริง

echo "This is just a test" | sed -e 's/ /_/g'

ผลตอบแทน

This_is_just_a_test

มีวิธีอื่นในการทำให้สำเร็จหรือไม่?


8
และคำถามคือ?
RageZ

2
สวัสดี latz Stackoverflow เป็นไซต์คำถามและคำตอบ คุณถามคำถามและคนอื่นตอบหรือคุณสามารถตอบคำถามจากคนอื่นได้ หากคุณต้องการแบ่งปันความรู้คุณสามารถถามคำถามแล้วตอบด้วยตัวเอง (หลังจากปล่อยเวลาให้คนอื่นตอบเช่นกัน)
mouviciel

2
oups คิดว่าฉันจะเพิ่มความรู้นี้ด้วยวิธีนี้จึงถูกเก็บไว้ที่นี่ ยังไงก็จะทำเหมือนที่คุณพูดไว้ครั้งหน้าโดยการตอบคำถามของฉันเอง :)
flazzarini

คำตอบ:


176

คุณสามารถทำได้โดยใช้เปลือกเท่านั้นไม่จำเป็นต้องมีtrหรือsed

$ str="This is just a test"
$ echo ${str// /_}
This_is_just_a_test

5
หรือแปลงอักขระคำที่ไม่ใช่ ASCII ทั้งหมดเป็นขีดล่าง: ${str//[^a-zA-Z0-9]/_}; ไม่ว่าจะด้วยวิธีใดก็ตามหากคุณไม่ยึดติดกับ POSIX เชลล์ที่บริสุทธิ์ให้ใช้คุณสมบัติที่คุณมี
ปืน

อาจมีเครื่องหมายวรรคตอนที่ถูกต้องเช่นกัน พวกเราไม่เคยรู็.
ghostdog74

ขอบคุณสำหรับโซลูชันนี้ตรงกับสิ่งที่ฉันกำลังมองหา ขอบคุณมาก
flazzarini

18

นี่คือการเขียนโปรแกรมแบบเส้นขอบ แต่ให้พิจารณาการใช้tr :

$ echo "this is just a test" | tr -s ' ' | tr ' ' '_'

ควรทำ. การเรียกใช้ครั้งแรกบีบช่องว่างลงส่วนที่สองแทนที่ด้วยขีดล่าง คุณอาจต้องเพิ่ม TAB และอักขระเว้นวรรคอื่น ๆ ซึ่งใช้สำหรับเว้นวรรคเท่านั้น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.