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
?
Oui, vous pouvez!
grep '[0-9]' file
Remplacez file
par le nom de votre fichier ...
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
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