ใช้ sed เพื่อกำจัดอักขระ <>,


18

ฉันมีไฟล์ที่มีบรรทัดดังนี้:

...
... <230948203[234]>, ...
... <234[24]>, ...
..

ฉันต้องการใช้ sed เพื่อลบอักขระ< ,และ>จากทุกบรรทัด

ฉันลองใช้sed 's/<>,//g'แต่มันใช้งานไม่ได้ (มันไม่เปลี่ยนอะไรเลย) ฉันต้องหลบหนีตัวละครพิเศษเหล่านี้หรือไม่ เป็นไปได้ไหมที่จะลบหลายอักขระโดยใช้sedคำสั่งเดียว?


2
bash-3.2$ echo "<230948203[234]>," | tr '<>,' ' '-> 230948203 [234] -EDITED Thanks to Paul

3
@srikanthradix: ที่ไม่ได้ลบอักขระเหล่านั้นจะถูกแทนที่ด้วยช่องว่าง คุณต้องการtr -d '<>,' ''(เช่นเดียวกับคำตอบของ Chris Down)
Keith Thompson

1
@ KeithThompson: tr -d '<>,'โดยไม่ต้อง '' ในตอนท้ายใช่ไหม?
ผู้ใช้ที่ไม่รู้จัก

@userunknown: ใช่ขอบคุณสำหรับการแก้ไข
Keith Thompson

คำตอบ:


43

ด้วยsed:

sed 's|[<>,]||g'

ด้วยtr:

tr -d '<>,'

2
ถูกต้อง แต่ส่วนตัวแล้วฉันพบว่าการใช้|ตัวคั่นเป็นสิ่งที่สับสนเล็กน้อย sed 's/[<>]//g'อ่านง่ายขึ้นนิดหน่อย
Keith Thompson

@ KeithThompson ฉันใช้เพื่อการปฏิบัติจริง ฉันพบตัวเองจัดการกับตัวอักษร|(และต้องหนีมัน) /มากน้อยกว่าที่ฉันต้องจัดการกับตัวอักษร
Chris Down

2
จุดยุติธรรม ในทางตรงกันข้าม|ก็มักจะเป็นตัวละครเมตาดาต้าที่ใช้สำหรับการสลับในไวยากรณ์ regexp บางอย่าง (แม้ว่าsedโดยเฉพาะอย่างยิ่งความต้องการที่\|สำหรับ) โดยส่วนตัวถ้าฉันต้องจัดการกับตัว/อักษรฉันมักจะใช้,เป็นตัวคั่น
Keith Thompson

1
นอกเหนือจากสถานการณ์ส่วนบุคคล / เฉพาะที่กล่าวถึงข้างต้นแล้วยังมีความแตกต่างทางไวยากรณ์อีกประการหนึ่งเมื่อใช้ตัวคั่นที่ไม่ได้มาตรฐาน ไม่ใช่ - / ตัวคั่นแรกจะต้องหลบหนีสำหรับการแสดงออกช่วง sed แต่ละครั้ง เช่น:printf 'a\nb\nc\n' | sed -n '\|a|,\|b|p'
Peter.O

8

ลองอันนี้: sed 's/[<>,]//g'


แถบแนวตั้งมีไว้ทำอะไร
พอลทอมบลิน

sed 's / [<|> |] / / g' - s ทำการค้นหา; / เป็นตัวคั่น; วงเล็บ [] ให้เราค้นหามากกว่าหนึ่งสิ่ง the | แถบแนวตั้งเป็นตรรกะหรือและ g คือการค้นหาทั่วโลกหรือไฟล์ทั้งหมด
Iman

3
คุณไม่จำเป็นต้อง (หรือจริงต้องการ) เดอะ|s []ภายใน 's/[<>,]//g'ใช้
เควิน

2
คุณไม่ต้องการแถบแนวตั้ง สิ่งใดในวงเล็บเหลี่ยมจะถูกค้นหาเป็นรายการ sed 's/[<>,]/ /g'จะทำงานได้ดียกเว้นความคิดของคุณจะลบแถบแนวตั้งเช่นกัน
พอลทอมบลิน

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