Как мне получить только числа в grep?

У меня есть такой файл, как этот :

 other lines . . .     blah blah blah (:34)

Я хочу найти вхождение чисел в приведенный выше файл. Я придумал:

grep [0-9] filename

Но это печать всего:

blah blah blah (:34)

Скорее я хочу только 34. Есть ли какой-нибудь способ сделать это?

Вы можете использовать grep -E чтобы получить доступ к расширенному синтаксису регулярных выражений (такой же, как эгреп)

Я создал тестовый файл с нижеприведенным содержимым:

>cat testfilethis is some textwith some random linesagain some textok now going for numbers (:32)ok now going for numbers (:12)ok now going for numbers (:132)ok now going for numbers (:1324)

Теперь, чтобы выделить только цифры из текста, вы можете использовать

>grep -Eo '[0-9]{1,4}' testfile32121321324

будет выводиться.

Здесь "-о" используется для вывода только соответствующего сегмента строки, а не полного содержимого строки.

Волнистые скобки (например, { и }) указывают количество экземпляров совпадения. {1,4} требует, чтобы предыдущий символ или класс символов встречались по крайней мере один раз, но не более четырех раз.

Надеюсь, это поможет

Вы можете использовать выражение в квадратных скобках [:digit:] указано в разделе 9.3.5 Стандарт POSIX , в сочетании с -o установите флажок для печати только совпадающих "слов"

$ grep -o '[[:digit:]]*' <<< $'No number in this line\nbut 123 here'                                                     123

Вы также можете использовать регулярные выражения в стиле Perl

grep -Po "\\d+" filename

- П Интерпретируйте ШАБЛОНЫ как регулярные выражения, совместимые с Perl (PCREs).

Выводите только совпадающие (непустые) части совпадающей строки, причем каждая такая часть выводится в отдельной выходной строке.

grep -o будет напечатана только соответствующая часть строки. В противном случае grep напечатает любые строки с шаблоном.

Я бы использовал curl для доступа к вашему файлу локально или удаленно, затем я бы выделил строки с числами, заключенными в (: ), затем отрезал бы эти фрагменты и записал в файл

принятый ответ игнорирует, что в предыдущих строках файла могут быть числа, это работает для примера данных, но что, если файл был удаленным?

Местный

curl file:///home/$USER/Public/input.txt  | grep -o '(:.*)' | cut -d ":" -f 2 | cut -d ")" -f 1 > output.txt

В этом примере output.txt в вашей текущей папке будет записано, мы обращаемся input.txt из вашей общей папки.

Дистанционный

curl https://yoursite.com/Public/input.txt  | grep -o '(:.*)' | cut -d ":" -f 2 | cut -d ")" -f 1 > output.txt

В этом примере output.txt в вашей текущей папке будет записано, мы обращаемся input.txt от https://yoursite.com/Public/.

Вы можете попробовать это >grep -o ‘[0-9][0-9]*’ тестовый файл

В будущем также проверьте справочную страницу для grep (или любой другой программы). На справочной странице подробно описаны параметры, необходимые для многих распространенных применений программы. например, man grep