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?
unix
search
grep
special-characters
Avinash Sonee
la source
la source
^@
: signifie^
suivi@
ou caractère nul?Réponses:
Dites
grep
à traiter votre entrée comme une chaîne fixe en utilisant l'-F
option.Une option
-n
est requise pour obtenir le numéro de ligne,la source
^
,$
,.
,*
et\
. ou vous pouvez essayerfgrep
aussi.fgrep
est le même quegrep -F
.egrep '*^%Q&$*&^@$&*!^@$*&^&^*&^&' application.log
?grep -rinF '-static'
impressionsInvalid option «t»
. La réponse de @ Mani a fonctionné , c'est-à-diregrep -rin "\-static"
.Celui qui a fonctionné pour moi est:
Le -e signifie que l'argument suivant est le modèle et ne sera pas interprété comme un argument.
De: http://www.linuxquestions.org/questions/programming-9/how-to-grep-for-string-769460/
la source
-
, voir aussi stackoverflow.com/questions/2427913/…Une note connexe
Pour grep pour le retour chariot, à savoir le
\r
caractère, ou0x0d
, nous pouvons le faire:Vous pouvez également utiliser
printf
, ouecho
, pour la compatibilité POSIXEt nous pouvons utiliser
hexdump
, ouless
pour voir le résultat:En ce qui concerne l'utilisation de
$'\r'
et d'autres caractères pris en charge, voir Manuel Bash> Citations ANSI-C :la source
la source
Vous pouvez essayer de supprimer tous les caractères alphanumériques et l'espace. Et puis utiliser
-n
vous donnera le numéro de ligne. Essayez de suivre:grep -vn "^[a-zA-Z0-9 ]*$" application.log
la source
Essayez vi avec l'option -b, cela affichera des caractères spéciaux de fin de ligne (je l'utilise généralement pour voir les fins de ligne Windows dans un fichier txt sur un système d'exploitation unix)
Mais si vous voulez une solution scriptée, vi ne fonctionnera évidemment pas, vous pouvez donc essayer les options -f ou -e avec grep et rediriger le résultat vers sed ou awk. Depuis la page de manuel de grep:
Sélection de correspondance -E, --extended-regexp Interpréter PATTERN comme une expression régulière étendue (ERE, voir ci-dessous). (-E est spécifié par POSIX.)
la source