Якщо у вас є GNU grep, ви можете скористатися його -oопцією для пошуку регулярного вираження та виведення лише відповідної частини. (Інші реалізації grep можуть показувати лише весь рядок.) Якщо в одному рядку є кілька збігів, вони друкуються окремими рядками.
grep -o '\[[0-9]*\]'
Якщо ви хочете лише цифри, а не дужки, це трохи складніше; вам потрібно використовувати твердження нульової ширини: регулярний вираз, який відповідає порожній рядку, але лише в тому випадку, якщо йому передують або дотримуються, якщо це залежно від випадку, дужки. Затвердження нульової ширини доступні лише в синтаксисі Perl.
grep -P -o '(?<=\[)[0-9]*(?=\])'
За допомогою sed вам потрібно вимкнути друк -nі зіставити всю лінійку та зберегти лише відповідну частину. Якщо в одному рядку є кілька можливих збігів, друкується лише останній збіг. Докладніші відомості про використання тут див. У розділі Витягнення регулярного вираження, збіганого із «sed», без друку навколишніх символів .
sed -n 's/^.*\(\[[0-9]*\]\).*/\1/p'
або якщо ви хочете лише цифри, а не дужки:
sed -n 's/^.*\[\([0-9]*\)\].*/\1/p'
Без цього grep -oPerl є інструментом вибору тут, якщо ви хочете чогось простого і зрозумілого. У кожному рядку ( -n), якщо рядок містить відповідність \[[0-9]*\], друкуйте його ( $&) та новий рядок ( -l).
perl -l -ne '/\[[0-9]*\]/ and print $&'
Якщо ви хочете лише цифри, покладіть дужки в регулярні вирази для розмежування групи та друкуйте лише цю групу.
perl -l -ne '/\[([0-9]*)\]/ and print $1'
PS Якщо ви хочете вимагати лише однієї або декількох цифр між дужками, перейдіть [0-9]*на Perl [0-9][0-9]*або на нього [0-9]+.
[number]" означає, за винятком[0-9]