Supprimer toutes les lignes de text qui ne sont pas tous des nombres

J'ai une list de mots que j'aimerais extraire chaque ligne de text qui ne contient que des numbers, à un nouveau file. Que fais-je?

Pour extraire uniquement les lignes contenant des numbers:

$ grep '^[0-9][0-9]*$' words >digits 

L'expression rationnelle ^[0-9][0-9]*$ correspondra à toute ligne commençant par un chiffre et ne contenant que des numbers jusqu'à la fin de la ligne.

Si votre file n'a pas de lignes vides, vous pouvez le changer en ^[0-9]*$ .

Si vous voulez des lignes avec des nombres , supprimez les lignes avec des caractères alphabétiques (plus facile que d'essayer de build une expression régulière pour un nombre générique):

 $ grep -v '[a-zA-Z]' words >numbers 

Les deux variantes utilisant des classs de caractères POSIX:

 $ grep '^[[:digit:]][[:digit:]]*$' words >digits $ grep -v '[[:alpha:]]' words >numbers 

Mise à jour : Si vous voulez sélectionner les lignes contenant des nombres à floating point, vous pouvez utiliser l'expression régulière (étendue) ^[+-]?([0-9]*\.)?[0-9]+$

 $ grep -E '^[+-]?([0-9]*\.)?[0-9]+$' words >floats 

Tout se résume à quel type de «numéro» que nous recherchons.

Supprimez toute ligne contenant des lettres par sed , puis mettez votre sortie dans un autre file:

 sed '/[az]/Id' yourInputFile > yourOutputFile 

OU si vous souhaitez modifier le file d'origine sur place:

 sed -i '/[az]/Id' yourInputFile