У меня есть файл как это:
other lines . . .
blah blah blah (:34)
Я хочу найти возникновение чисел в вышеупомянутом файле. Я придумал:
grep [0-9] filename
Но это печатает целое:
blah blah blah (:34)
Скорее я хочу только 34
. Там какой-либо путь состоит в том, чтобы сделать так?
Можно использовать grep -E
получить доступ к синтаксису расширенного регулярного выражения (То же как egrep)
Я создал testfile с ниже содержания:
>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} требует, чтобы предыдущий класс символов или класс символов произошли, по крайней мере, однажды, но не больше, чем четыре раза.
Надеюсь, это поможет
Можно использовать выражение [:digit:]
скобки РЕ, указанное разделом 9.3.5 из стандарт POSIX , в сочетании с -o
флаг для печати только распознающих "слов"
$ grep -o '[[:digit:]]*' <<< No number in this line\nbut 123 here'
123
grep -o
распечатает только часть соответствия строки. Иначе grep распечатает любые строки с шаблоном.
Я использовал бы завихрение для доступа к файлу локально или удаленно, затем я буду grep строки с числами, перенесенными в (:) затем отключите те части и запишите в файл
принятый ответ игнорирует могли быть числа в предыдущих строках файла, он действительно работает на данные в качестве примера, но что, если файл был удаленным?
Локальный
curl file:///home/$USER/Public/input.txt | grep -o '(:.*)' | cut -d ":" -f 2 | cut -d ")" -f 1 > output.txt
В этом примере output.txt
в Вашей текущей папке будет переписан, мы получаем доступ input.txt
от Вашей папки Public.
Удаленный
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/
.
Вы также можете использовать регулярные выражения в стиле Perl
grep -Po "\\d+" filename
-P Интерпретировать ШАБЛОНЫ как Perl-совместимые регулярные выражения (PCRE).
-o Печатать только совпадающие (непустые) части совпадающей строки, причем каждая такая часть находится в отдельной строке вывода.