หากคุณมี GNU grep คุณสามารถใช้มันได้ -o
ตัวเลือกเพื่อค้นหา regex และส่งออกเฉพาะส่วนที่จับคู่ (การใช้งาน grep อื่น ๆ สามารถแสดงทั้งบรรทัดได้) หากมีการแข่งขันหลายรายการในหนึ่งบรรทัด
grep -o '\[[0-9]*\]'
หากคุณต้องการเฉพาะตัวเลขและไม่ใช่วงเล็บมันยากกว่านิดหน่อย คุณต้องใช้การยืนยันที่มีความกว้างเป็นศูนย์: regexp ที่ตรงกับสตริงว่าง แต่ถ้ามันถูกนำหน้าหรือตามด้วยตัวพิมพ์เล็กโดยวงเล็บ การยืนยันความกว้างเป็นศูนย์นั้นมีเฉพาะในไวยากรณ์ของ Perl เท่านั้น
grep -P -o '(?<=\[)[0-9]*(?=\])'
ด้วย sed คุณจะต้องปิดการพิมพ์ด้วย-n
และจับคู่ทั้งบรรทัดและเก็บเฉพาะส่วนที่ตรงกัน หากมีการแข่งขันที่เป็นไปได้หลายรายการในหนึ่งบรรทัดจะมีการพิมพ์เฉพาะนัดสุดท้ายเท่านั้น ดูที่การแยก regex ที่ตรงกับ 'sed' โดยไม่ต้องพิมพ์อักขระโดยรอบสำหรับรายละเอียดเพิ่มเติมเกี่ยวกับการใช้ sed ที่นี่
sed -n 's/^.*\(\[[0-9]*\]\).*/\1/p'
หรือถ้าคุณต้องการตัวเลขและไม่ใช่วงเล็บ:
sed -n 's/^.*\[\([0-9]*\)\].*/\1/p'
หากไม่มีgrep -o
Perl ก็เป็นเครื่องมือที่ดีที่สุดหากคุณต้องการบางสิ่งที่เรียบง่ายและเข้าใจง่าย ในทุกบรรทัด ( -n
) หากบรรทัดมีการจับคู่สำหรับ\[[0-9]*\]
ให้พิมพ์การจับคู่นั้น ( $&
) และการขึ้นบรรทัดใหม่ ( -l
)
perl -l -ne '/\[[0-9]*\]/ and print $&'
หากคุณต้องการเฉพาะตัวเลขให้ใส่เครื่องหมายวงเล็บใน regex เพื่อกำหนดกลุ่มและพิมพ์เฉพาะกลุ่มนั้น
perl -l -ne '/\[([0-9]*)\]/ and print $1'
ป.ล. ถ้าคุณต้องการเพียงหนึ่งหรือมากกว่าหลักระหว่างวงเล็บเปลี่ยน[0-9]*
เป็น[0-9][0-9]*
หรือ[0-9]+
ใน Perl
[number]
" หมายถึงยกเว้น[0-9]