web-dev-qa-db-fra.com

grep pour les caractères spéciaux sous Unix

J'ai un fichier journal (application.log) qui peut contenir la chaîne suivante de caractères normaux et spéciaux sur plusieurs lignes:

*^%Q&$*&^@$&*!^@$*&^&^*&^&

Je souhaite rechercher le ou les numéros de ligne contenant cette chaîne de caractères spéciaux.

grep '*^%Q&$*&^@$&*!^@$*&^&^*&^&' application.log

La commande ci-dessus ne renvoie aucun résultat.

Quelle serait la syntaxe correcte pour obtenir les numéros de ligne?

78
Avinash Sonee

Dites à grep de traiter votre entrée comme une chaîne fixe en utilisant l'option -F.

grep -F '*^%Q&$*&^@$&*!^@$*&^&^*&^&' application.log

L'option -n est requise pour obtenir le numéro de ligne,

grep -Fn '*^%Q&$*&^@$&*!^@$*&^&^*&^&' application.log
142
Prince John Wesley

Celui qui a fonctionné pour moi est:

grep -e '->'

Le -e signifie que l'argument suivant est le motif et ne sera pas interprété comme un argument.

De: http://www.linuxquestions.org/questions/programming-9/how-to-grep-for-string-769460/

75
Tom Brito

Une note connexe

Pour grep pour le retour chariot, à savoir le caractère \r ou 0x0d, nous pouvons faire ceci:

grep -F $'\r' application.log

Vous pouvez également utiliser printf ou echo pour la compatibilité POSIX.

grep -F "$(printf '\r')" application.log

Et nous pouvons utiliser hexdump, ou less pour voir le résultat:

$ printf "a\rb" | grep -F $'\r' | hexdump -c
0000000   a  \r   b  \n

En ce qui concerne l'utilisation de $'\r' et d'autres caractères pris en charge, voir Manuel Bash> Citation ANSI-C :

Les mots de la forme $ 'chaîne' sont traités spécialement. Word se développe en chaîne, avec les caractères d'échappement avec une barre oblique inversée remplacés comme spécifié par la norme ANSI C

6
ryenus
grep -n "\*\^\%\Q\&\$\&\^\@\$\&\!\^\@\$\&\^\&\^\&\^\&" test.log
1:*^%Q&$&^@$&!^@$&^&^&^&
8:*^%Q&$&^@$&!^@$&^&^&^&
14:*^%Q&$&^@$&!^@$&^&^&^&
3
Mani

Vous pouvez essayer de supprimer les caractères alphanumériques et l’espace. Et ensuite, utilisez -n vous donnera le numéro de ligne. Essayez de suivre:

grep -vn "^[a-zA-Z0-9 ]*$" application.log

2
R. Kumar