web-dev-qa-db-ja.com

数字のある行を見つける

数値を含む行を見つける方法は?

つまり、いくつかの数字を含む行を見つけたいです。 Ubuntu 16.04を使用しています。 grepコマンドでこれを実行できますか?

5
Avani badheka

はい、できます!

grep '[0-9]' file

fileをファイルの名前に置き換えます...

13
Zanna

いくつかの選択肢がありますが、すべて次のテスト入力ファイルを使用します。

foo
bar 12
baz

これらのコマンドはすべて、少なくとも1つの数字を含む入力行を印刷します。

$ 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
terdon

誰も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()関数を使用して行を一致させ、最後にリストを出力しますそれらの行。少し長いですが、動作します。次のように、いくつかの部分を大幅に短縮できます。

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