У мене є такий файл:
other lines . . .
blah blah blah (:34)
Я хочу знайти кількість цифр у наведеному вище файлі. Я придумав:
grep [0-9] filename
Але це друкує ціле:
blah blah blah (:34)
Швидше я хочу лише 34. Чи можна це зробити?
У мене є такий файл:
other lines . . .
blah blah blah (:34)
Я хочу знайти кількість цифр у наведеному вище файлі. Я придумав:
grep [0-9] filename
Але це друкує ціле:
blah blah blah (:34)
Швидше я хочу лише 34. Чи можна це зробити?
Відповіді:
Ви можете використовувати 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} вимагає, щоб попередній клас символів або символів мали місце принаймні один раз, але не більше чотирьох разів.
Сподіваюся, це допомагає
grep -Eo '[0-9]{1,}' testfile
Ви можете використовувати вираз дужки RE, [:digit:]визначений розділом 9.3.5 стандарту POSIX , у поєднанні з -oпрапором для друку лише відповідних "слів"
$ grep -o '[[:digit:]]*' <<< $'No number in this line\nbut 123 here'
123
Я б використовував 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/.
curlколи простий catбуде?
man grep