web-dev-qa-db-fra.com

Trouver une ligne avec des chiffres

Comment trouver une ligne contenant des valeurs numériques?

c’est-à-dire que je veux trouver une ligne comportant des chiffres. J'utilise Ubuntu 16.04. Puis-je faire cela avec la commande grep?

5
Avani badheka

Oui, vous pouvez!

grep '[0-9]' file

Remplacez file par le nom de votre fichier ...

13
Zanna

Voici quelques choix, tous utilisant le fichier d’entrée de test suivant:

foo
bar 12
baz

Toutes ces commandes imprimeront toutes les lignes d’entrée contenant au moins un nombre:

$ 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

Personne n'a encore mentionné python, alors voici:

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

L’idée de base est de donner un fichier en entrée stdin, le code python lit toutes les lignes en stdin et utilise la fonction re.findall() du module regex pour faire correspondre les lignes, puis affiche la liste des ces lignes. Un peu long, mais ça marche. Certaines parties peuvent être raccourcies, par exemple:

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

Sur la note de côté, c'est python2. Utilisez la fonction print avec des parenthèses pour l’adapter à python3

2