Jika Anda memiliki GNU grep, Anda dapat menggunakan -oopsi untuk mencari regex dan hanya menghasilkan bagian yang cocok. (Implementasi grep lainnya hanya dapat menampilkan seluruh baris.) Jika ada beberapa kecocokan pada satu baris, mereka dicetak pada garis yang berbeda.
grep -o '\[[0-9]*\]'
Jika Anda hanya menginginkan angka dan bukan tanda kurung, itu sedikit lebih sulit; Anda perlu menggunakan pernyataan nol-lebar: regexp yang cocok dengan string kosong, tetapi hanya jika didahului, atau diikuti seperti kasusnya, dengan braket. Pernyataan nol-lebar hanya tersedia dalam sintaks Perl.
grep -P -o '(?<=\[)[0-9]*(?=\])'
Dengan sed, Anda harus mematikan pencetakan -n, dan mencocokkan seluruh garis dan hanya mempertahankan bagian yang cocok. Jika ada beberapa kemungkinan kecocokan pada satu baris, hanya kecocokan terakhir yang dicetak. Lihat Mengekstrak regex yang cocok dengan 'sed' tanpa mencetak karakter di sekitarnya untuk detail lebih lanjut tentang penggunaan sed di sini.
sed -n 's/^.*\(\[[0-9]*\]\).*/\1/p'
atau jika Anda hanya menginginkan angka dan bukan tanda kurung:
sed -n 's/^.*\[\([0-9]*\)\].*/\1/p'
Tanpa grep -o, Perl adalah alat pilihan di sini jika Anda menginginkan sesuatu yang sederhana dan mudah dipahami. Di setiap baris ( -n), jika baris berisi kecocokan untuk \[[0-9]*\], maka cetak kecocokan itu ( $&) dan baris baru ( -l).
perl -l -ne '/\[[0-9]*\]/ and print $&'
Jika Anda hanya menginginkan digit, letakkan tanda kurung di regex untuk membatasi grup, dan cetak hanya grup itu.
perl -l -ne '/\[([0-9]*)\]/ and print $1'
PS Jika Anda hanya ingin meminta satu angka atau lebih di antara tanda kurung, ubah [0-9]*ke [0-9][0-9]*, atau ke [0-9]+dalam Perl.
[number]" berarti kecuali[0-9]