web-dev-qa-db-fra.com

Grep pour les chaînes littérales

Je recherche un outil de type grep pour rechercher des chaînes purement littérales. Je recherche l'occurrence d'une ligne d'un fichier journal, en tant que partie d'une ligne dans un fichier journal séparé. Le texte de recherche peut contenir toutes sortes de caractères spéciaux regex, par exemple []().*^$-\.

Existe-t-il un utilitaire de recherche Unix qui n’utiliserait pas regex, mais rechercherait simplement les occurrences littérales d’une chaîne?

71
Ben

Vous pouvez utiliser grep pour cela, avec l'option -F.

-F, --fixed-strings       PATTERN is a set of newline-separated fixed strings
103
Scott Stafford

C'est soit fgrep ou grep -F qui ne fera pas d'expressions régulières. fgrep est identique à grep -F mais je préfère ne pas avoir à me soucier des arguments, étant intrinsèquement paresseux :-)

grep   ->  grep
fgrep  ->  grep -F  (fixed)
egrep  ->  grep -E  (extended)
rgrep  ->  grep -r  (recursive, on platforms that support it).
8
paxdiablo

Passez -F à grep.

3

vous pouvez également utiliser awk, car il a la capacité de trouver une chaîne fixe, ainsi que des capacités de programmation, par exemple uniquement

awk '{for(i=1;i<=NF;i++) if($i == "mystring") {print "do data manipulation here"} }' file
3
ghostdog74
cat list.txt
one:hello:world
two:2:nothello

three:3:kudos

grep --color=always -F"hello

three" list.txt

sortie

one:hello:world
three:3:kudos
0
parandhaman