Если у вас есть GNU grep, вы можете использовать его -o
опцию для поиска регулярных выражений и вывода только соответствующей части. (Другие реализации grep могут показывать только всю строку.) Если в одной строке несколько совпадений, они печатаются в отдельных строках.
grep -o '\[[0-9]*\]'
Если вам нужны только цифры, а не скобки, это немного сложнее; вам нужно использовать утверждение нулевой ширины: регулярное выражение, совпадающее с пустой строкой, но только в том случае, если ему предшествует или следует, в зависимости от обстоятельств, скобка. Утверждения нулевой ширины доступны только в синтаксисе Perl.
grep -P -o '(?<=\[)[0-9]*(?=\])'
С помощью sed вам нужно отключить печать с помощью -n
, сопоставить всю строку и сохранить только соответствующую часть. Если в одной строке несколько возможных совпадений, печатается только последнее совпадение. См. Извлечение регулярного выражения в сочетании с «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 $&'
Если вам нужны только цифры, поместите скобки в регулярное выражение, чтобы разделить группу, и напечатайте только эту группу.
perl -l -ne '/\[([0-9]*)\]/ and print $1'
PS Если вы хотите использовать только одну или несколько цифр в скобках, измените [0-9]*
на [0-9][0-9]*
или на [0-9]+
Perl.
[number]
» означает, кроме[0-9]