2010-09-02 4 views
0

Salut J'ai beaucoup de fichiers journaux avec^[[1m (comme VIM l'affiche). Je veux regarder une vie de fichier journal viaMatch séquence d'échappement pour "gras" dans la sortie de la console avec grep

tail -n 1000 -f logfile.log | grep <expression-for-escape-sequence> 

et seulement obtenir les lignes qui ont gras en eux. Je ne sais pas quelles options grep je devrais utiliser et ont essayé ce qui suit déjà:

tail -n 1000 -f logfile.log | grep "\033\0133\061\0155" 
tail -n 1000 -f logfile.log | grep "\033\01331m" 
tail -n 1000 -f logfile.log | grep "\033\[1m" 

Il ne fonctionne pas bien ... Et oui, il y a des lignes en gras dans les 1000 dernières lignes de LogFile.log, les tests avec

echo -e "\033\01331mTest\033\01330m" | grep ... 

mêmes résultats ...;)

Appréciez toute aide!

Répondre

2

Utilisez des guillemets simples avec un signe dollar devant — comme dans $'...' — pour avoir la coquille convertir la séquence d'échappement \033 en un caractère ESC:

tail -n 1000 -f logfile.log | grep $'\033\[1m' 

De man bash:

Les mots de la forme $'string' sont traités spécialement. Le mot se développe en string, avec des caractères d'échappement à barre oblique inverse remplacés comme spécifié par la norme ANSI C.

+0

Merci! Ceci est exactement ce que je cherchais! C'était vraiment un cauchemar à la recherche de google pour une solution à cause de tous les caractères spéciaux;)! – Anon

0

Cela fonctionne (dans une coquille POSIX, pas nécessairement bash):

echo -e "\033\01331mTest\033\01330m" | grep "$(printf "\x1b\\[1m")" 
Questions connexes