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

42

У меня есть файл вроде этого:

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

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

grep [0-9] filename

Но это печатает целое:

blah blah blah (:34)

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

    
задан Ant's 05.09.2012 в 05:32
источник

3 ответа

48

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

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

>cat testfile
this is some text
with some random lines

again some text
ok now going for numbers (:32)
ok now going for numbers (:12)
ok now going for numbers (:132)
ok now going for numbers (:1324)

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

>grep -Eo '[0-9]{1,4}' testfile
32
12
132
1324

.

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

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

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

    
ответ дан devav2 05.09.2012 в 06:40
источник
4

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

    
ответ дан roadmr 05.09.2012 в 05:41
3

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

$ grep -o '[[:digit:]]*' <<< $'No number in this line\nbut 123 here'                                                     
123
    
ответ дан Sergiy Kolodyazhnyy 05.02.2017 в 18:29