การแทนที่ [0-9] ด้วย [AJ] ไม่ทำงานกับ sed


11

ฉันกำลังทำงานกับคำสั่งที่แทนที่ตัวเลขทั้งหมด 0-9 ด้วยตัวอักษรที่เกี่ยวข้องใน sed ฉันรู้ว่าฉันกำลังทำอะไรผิดพลาด แต่ sed ไม่ได้ตีความ regex การเปลี่ยนเป็นอะไรเลยยกเว้นสตริงตัวอักษร

คำสั่งที่ฉันใช้คือ sed -r 's/[0-9]/[A-J]/g' log > ~/output.txt

ดูเหมือนจะตรงไปตรงมากับฉัน แต่ฉันติดอยู่กับมันประมาณหนึ่งชั่วโมง ผลลัพธ์ที่ฉันได้รับเพียงแทนที่ 0-9 ด้วยสตริง "[AJ]"

คำตอบ:


38

ในการทดแทนเฉพาะการจับคู่ (ด้านซ้าย) เป็นนิพจน์ทั่วไป ทดแทนจะมากหรือน้อยเพียงสตริงตัวอักษร (กับการขยายตัวทับขวาบางส่วน) - มันไม่นิพจน์ทั่วไป

คุณต้องการทับศัพท์ไม่ใช่การทดแทนดังนั้นแทนที่sด้วยy:

echo 34031445 | sed 'y/0123456789/ABCDEFGHIJ/'

sed ไม่สามารถใช้ช่วงในyแต่ Perl สามารถ:

echo 34031445 | perl -pe 'y/0-9/A-J/'

หรือเพียงแค่ใช้tr:

echo 34031445 | tr 0-9 A-J

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