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.