D'accord, un peu tard pour ajouter ma contribution, mais je pense que ça vaut le coup.
L'obligation de satisfaire, selon l'OP, est la première colonne ayant la valeur décimale de .000
ou .500
seulement. Il n'y a aucune stipulation quant à la valeur principale, ni par plage ni par longueur. Pour la robustesse , il ne faut pas présumer être contraint par quoi que ce soit , sauf qu'il n'y a pas de caractères non-vides avant la première colonne (ou il est plus la première colonne) et que le contenu de la première colonne sera un point décimal, .
, quelque part.
L'OP souhaite utiliser grep
, ce qui imprimera la ligne entière lorsqu'une correspondance est trouvée, donc la seule chose à faire est de créer le modèle qui correspond à tout et seulement ce qui est requis.
La simplicité elle-même, et aucune raison d'utiliser sed
ou awk
comme `grep peut gérer la source comme un fichier ou un canal.
Pour grep
utiliser un fichiergrep '^[^.]*\.[05]0\{2\}\s' the_file.txt
À grep
partir d'un tuyau, utilisezmy_command | grep '^[^.]*\.[05]0\{2\}\s'
Le modèle est:, ^
commencez au début de la ligne; [^.]
, correspond à tout caractère non décimal; *
, autant de fois que possible (y compris aucune); \.
, correspond à un point décimal; [05]
, correspond à un cinq ou à un zéro; 0\{2\}
, correspond à 2 autres zéros (les barres obliques inverses avant l'accolade ouverte et fermée empêchent le shell d'essayer de faire l'expansion de l'accolade); \s
, correspond à un espace (signifiant la fin de la colonne - à utiliser dans un autre cas d'utilisation, remplacez-le par le séparateur de colonne, généralement une virgule, un point-virgule ou une tabulation \t
).
Notez que cela correspondra exactement à ce que l'OP a demandé. Il ne correspondra pas.5000
ou .0000
même s'il est numériquement équivalent, car le motif recherche un cinq ou un zéro, suivi d'exactement 2 autres zéros suivis d'un espace. Si cela est significatif, toutes les autres réponses, jusqu'à présent, échouent en ce sens qu'elles correspondront à n'importe quel nombre de zéros, supérieur à 1, après le chiffre de test. Et sauf à la réponse de FloHimself, ils correspondront à tout dans la deuxième colonne qui commence .000
ou .500
, y compris .0003
et .500T
, et celui de FloHimself correspondra à tout ce qui est mathématiquement équivalent à .0
et.5
, peu importe le nombre de zéros. Le dernier, tout en ne correspondant pas à ce que le PO a déclaré, est susceptible de correspondre de toute façon à ce dont le PO a besoin.
Enfin, si la puissance et la vitesse de awk
sont souhaitées, même si l'OP le demandait grep
, alors la commande serait:
Avec un fichier awk '$1 ~ /[^.]\.[05]0{2}$/' the_file.txt
Avec une pipe my_command | awk '$1 ~ /[^.]\.[05]0{2}$/'