Якщо у вас є 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 -o
Perl є інструментом вибору тут, якщо ви хочете чогось простого і зрозумілого. У кожному рядку ( -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]