Як отримати лише цифри в греппі?


57

У мене є такий файл:

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

Я хочу знайти кількість цифр у наведеному вище файлі. Я придумав:

grep [0-9] filename

Але це друкує ціле:

blah blah blah (:34)

Швидше я хочу лише 34. Чи можна це зробити?


Надалі також ознайомтеся з довідковою сторінкою щодо grep (або будь-якої іншої програми). На головній сторінці детально описані параметри, необхідні для багатьох поширених програм програми. напр.man grep
hnasarat

Ви можете спробувати це> grep -o '[0-9] [0-9] *' testfile

Відповіді:


75

Ви можете використовувати 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 -Eo '[0-9]{1,4}' testfile
32
12
132
1324

буде вихід.

Тут "-o" використовується лише для виведення відповідного сегмента рядка, а не повного вмісту рядка.

Накручені дужки (наприклад, {і}) вказують кількість примірників матчу. {1,4} вимагає, щоб попередній клас символів або символів мали місце принаймні один раз, але не більше чотирьох разів.

Сподіваюся, це допомагає


3
Приємно. Також, щоб відповідати більше 4-х або довільній кількості цифр, використовуйте grep -Eo '[0-9]{1,}' testfile
FractalSpace

8

Ви можете використовувати вираз дужки RE, [:digit:]визначений розділом 9.3.5 стандарту POSIX , у поєднанні з -oпрапором для друку лише відповідних "слів"

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

5

grep -oбуде друкувати лише відповідну частину рядка. Інакше grep надрукує будь-які рядки з малюнком.


1

Я б використовував 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/.


1
Навіщо використовувати curlколи простий catбуде?
PerlDuck

У цьому питанні чітко не вказано, що файл локальний. ця відповідь дозволяє обидва.
Стеф
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.