แทนที่รูปแบบในคอลัมน์เฉพาะใน sed

ฉันมีไฟล์แท็บที่มีสองคอลัมน์ตามด้านล่าง

BB_12  100_AA
BB_13  101_AB 
BB_14  102_AD
BB_15  103_AC

ฉันต้องการลบ number_ ในคอลัมน์ที่สอง (แทนที่ number_ ด้วยไม่มีอะไร) สำหรับสิ่งนี้ฉันลอง sed แทนที่ด้วยวิธีต่อไปนี้ไม่สำเร็จ

sed 's/\d+\_//g' infile
sed 's/(\d+\_)//g' infile

แต่การปรับแต่งใด ๆ ไม่ได้ผล ดูเหมือนว่าจะไม่ได้ค้นหาในคอลัมน์ที่ 2 จะแก้ไขสิ่งนี้ได้อย่างไร? ผลลัพธ์ที่คาดหวังคือ

BB_12  AA
BB_13  AB 
BB_14  AD
BB_15  AC

ขอบคุณล่วงหน้า.


person Arun    schedule 22.01.2018    source แหล่งที่มา
comment
sed ไม่รองรับ \d.. สำหรับการดำเนินการที่เกี่ยวข้องกับคอลัมน์ โปรดพิจารณาใช้ awk   -  person Sundeep    schedule 22.01.2018


คำตอบ (2)


คุณสามารถประมวลผลคอลัมน์สุดท้ายด้วย sed:

sed -E 's/[^ ]*_([^ ]*) *$/\1/' file

ผลลัพธ์:

BB_12  AA
BB_13  AB
BB_14  AD
BB_15  AC

Awk ทางเลือก:

awk '{ sub(/^[^ ]+_/, "", $2) }1' OFS='\t' file
person RomanPerekhrest    schedule 22.01.2018

การทำตามอย่างง่าย sed อาจช่วยคุณได้เหมือนกัน

sed 's/\([^ ]*\) \([^_]*\)_\(.*\)/\1 \3/g'   Input_file

ผลลัพธ์ที่ได้จะเป็นดังนี้

BB_12 AA
BB_13 AB
BB_14 AD
BB_15 AC
person RavinderSingh13    schedule 22.01.2018
comment
การอ้างอิงด้านหลังไม่จำเป็นจริงๆ ที่นี่ และทำให้สำนวนซับซ้อนอย่างมาก เพียงแทนที่แท็บตามด้วยตัวเลขและขีดล่างด้วยเพียงแท็บ s/ [0-9][0-9]*_/ / - person tripleee; 22.01.2018