$echo "foo 65 bar" | sed -n -e 's/.*\([0-9]\+\).*/\1/p'
5
ทำไมเอาต์พุตไม่ได้65
? ไม่ควรที่จะตะกละตะกละตะกละใส่ชิ้น[0-9]\+
ส่วนเหรอ? ฉันจะบอกให้ sed ตรงกับทั้งหมดได้65
อย่างไร
$echo "foo 65 bar" | sed -n -e 's/.*\([0-9]\+\).*/\1/p'
5
ทำไมเอาต์พุตไม่ได้65
? ไม่ควรที่จะตะกละตะกละตะกละใส่ชิ้น[0-9]\+
ส่วนเหรอ? ฉันจะบอกให้ sed ตรงกับทั้งหมดได้65
อย่างไร
คำตอบ:
ความ.*
โลภครั้งแรก - มันเข้าfoo 6
กันแล้ว เหตุผลเดียวที่จะหยุดที่นั่นเป็นเพราะการจับคู่ใด ๆ เพิ่มเติมจะหยุดรูปแบบทั้งจากการจับคู่จึงใบสำหรับ5
([0-9]+)
ถ้าคุณทำมัน([0-9]*)
แทน.*
จะตรงกับทั้งบรรทัดและคุณจะไม่ได้อะไรเลยในกลุ่มของคุณ วิธีหนึ่งในการบอกส่วนแรกไม่ให้ตรงกับหมายเลข:
$ echo "foo 65 bar" | sed -n -e 's/[^0-9]*\([0-9]\+\).*/\1/p'
65