grep ne trouve pas les valeurs de chaîne “. *”

J’ai un fichier temp.txt comme ci-dessous.

a.*,super 

Je veux grep .* Pour vérifier si la valeur est présente dans le fichier ou non.

Commande utilisée:

 grep -i ".*" temp.txt 

ne retourne rien

Utiliser awk

 awk '/\.\*/' file 

ou fgrep

 fgrep ".*" file 

C’est parce que grep considère le motif comme une expression régulière.

Pour que grep interprète comme un littéral, utilisez -F .

 grep -F ".*" temp.txt 

De plus, note -i n’est pas nécessaire, car il n’y a pas de distinction de cas à prendre en compte (nous l’utilisons par exemple pour que grep retourne AB , aB , Ab et ab lors de grep -i "ab" ).


Comme le dit l’ man grep :

-F, –fixed-ssortingngs

Interpréter le MOTIF sous la forme d’une liste de chaînes fixes, séparées par des nouvelles lignes. (-F est spécifié par POSIX.)

-i, –ignore-case

Ignore les distinctions de casse dans les fichiers PATTERN et les fichiers d’entrée. (-i est spécifié par POSIX.)

Les deux , * ont une signification spéciale dans les expressions régulières. Échapper à eux pour correspondre littéralement.

 $ cat temp.txt a.*,super $ grep "\.\*" temp.txt a.*,super $ echo $? 0 $ grep "there-is-no-such-ssortingng" temp.txt $ echo $? 1 

-i n’est pas nécessaire car il n’y a pas d’alphabet dans l’expression régulière.