Найдите строку с цифрами

Как найти строку, которая содержит численные значения?

т.е. Я хочу найти некоторую строку, которая имеет некоторые цифры в нем. Я использую Ubuntu 16.04. Я могу сделать это с grep команда?

5
задан 3 December 2016 в 01:02

3 ответа

Да Вы можете!

grep '[0-9]' file

Замена file с названием Вашего файла...

13
ответ дан 23 November 2019 в 08:38

Вот несколько вариантов, все использующие следующий тестовый входной файл:

foo
bar 12
baz

Все эти команды распечатают любые входные строки, содержащие по крайней мере одно число:

$ grep '[0-9]' file
bar 12
$ grep -P '\d' file
bar 12
$ awk '/[0-9]/' file
bar 12
$ sed -n '/[0-9]/p' file
bar 12
$ perl -ne 'print if /\d/' file
bar 12
$ while read line; do [[ $line =~ [0-9] ]] && printf '%s\n' "$line"; done < file
bar 12
$ while read line; do [[ $line = *[0-9]* ]] && printf '%s\n' "$line"; done < file
bar 12
11
ответ дан 23 November 2019 в 08:38

Никто еще не упомянул Python, таким образом, здесь это:

bash-4.3$ cat file
foo
foo1bar
barfoo foo bar
barfoo 123 foobar 321
bash-4.3$ python -c 'import re,sys;matched=[line.strip() for line in sys.stdin if re.findall("[0-9]",line)];print "\n".join(matched)' < file 
foo1bar
barfoo 123 foobar 321

Основная идея, как это работает, состоит в том, что мы даем файл как stdin вход, код Python читает все строки в stdin и использует re.findall() функция от regex модуля для соответствия строкам и наконец распечатывает список тех строк. Немного длинный, но работы. Некоторые части могут быть сокращены много, сказать как это:

python -c 'import re,sys;print "\n".join([l.strip() for l in sys.stdin if re.findall("[0-9]",l)])' < file 

На ноте стороны, это - python2. Используйте print функция с круглыми скобками для адаптации его к python3

2
ответ дан 23 November 2019 в 08:38

Другие вопросы по тегам:

Похожие вопросы: