Enregistrer la sortie d'un grep dans un fichier avec des couleurs

34

Je dois enregistrer le résultat d’une commande grep dans un fichier, mais je souhaite également que le fichier de sortie soit formaté et conserve les couleurs comme dans le terminal.

Y a-t-il un moyen de le faire? Peut-être que grep enregistre dans un langage de balisage? Si ce n'est pas possible, existe-t-il un autre outil capable d'accomplir cette tâche?

J'essaie de faire ressortir le mot-clé de recherche dans le fichier de sortie, exactement comme dans le terminal.

    
posée Mhd.Tahawi 25.07.2014 - 11:11
la source

3 réponses

38

Pour conserver le balisage, vous avez besoin de plus qu’un simple fichier texte. J'utiliserais la sortie HTML pour conserver les couleurs.

  • Installez aha ie pour "convertir les séquences d'échappement ANSI d'un terminal unix au code HTML "

    sudo apt-get install aha
    
  • sauvegardez ensuite votre sortie grep (ou ls ) comme ceci:

    ls --color=always | aha --black --title 'ls-with-colors' > ls-with-colors.html
    

    options:

    --black param to set background as black color
    --title param to set the title for HTML page
    

Surlignement de la syntaxe de l’extension de fichier via pygmentize

  • installer pygmentize :

    sudo apt-get install python-pygments
    
  • alors lancez ce genre de commande:

    pygmentize file.pl | grep -i --color=always version | aha --black > ls-with-colors.html
    

    
réponse donnée Sylvain Pineau 25.07.2014 - 11:36
la source
9

Selon ce que vous voulez faire avec le fichier de sortie, il est possible d’ajouter des couleurs à un fichier texte normal car les couleurs proviennent simplement de caractères spéciaux. Grep semble ne pas vouloir les imprimer lorsque vous le redirigez vers un fichier, vous devez donc le forcer à:

grep --color=always "stuff" input.txt > output.txt

Maintenant, lorsque vous imprimez le fichier sur la console, il sera imprimé avec les couleurs, car Bash interprète ces caractères comme "utiliser cette couleur".

cat output.txt

Cependant, si vous l'ouvrez dans un éditeur comme vim , vous obtiendrez des caractères étranges. Par exemple, lorsque j'utilise les commandes

echo "A sentence. A red sentence. Another sentence." \
  | grep --color=always "A red sentence" > output.txt

La sortie semble correcte quand je l’imprime en utilisant cat mais quand je l’ouvre en vim , je reçois

A sentence. ^[[01;31m^[[KA red sentence^[[m^[[K. Another sentence.

Donc, si vous voulez utiliser un éditeur, ce n'est probablement pas ce que vous voulez.

    
réponse donnée MasterOfBinary 25.07.2014 - 17:25
la source
2

Si j'ai bien compris, vous voulez enregistrer une sortie de terminal dans un fichier texte, non? Mais vous voulez qu'il soit formaté avec des couleurs. Si tel est le cas, voici mes idées:

Mise en évidence automatique de la sortie

Comme vous le savez probablement, si vous capturez une sortie grep dans un fichier texte, car il s’agit d’un fichier texte, il ne peut pas être formulé. Donc, pour autant que je sache, vous ne pouvez pas le faire facilement.

Malgré cela, il existe une solution simple, consistant à faire en sorte que votre éditeur de texte réalise le type de fichier qu’il ouvre. Par exemple, disons que votre sortie de grep a des composants bash, donc les mises en évidence de bash fonctionnent pour vous (au fait, ce sont souvent les couleurs que vous voyez dans une sortie colorée dans le terminal). L'astuce consiste donc à enregistrer la sortie de texte dans un fichier avec l'extension appropriée. Au lieu de faire quelque chose comme:

ls | grep something > output

vous pouvez aller pour

ls | grep something > output.sh

Ce qui fera que gedit (ou tout éditeur de texte décent) reconnaîtra automatiquement que vous parlez du code bash, et le mettra en évidence en conséquence. Vous n'avez pas besoin de colorer la sortie, le programme le fera pour vous s'il reconnaît le type de code qu'il ouvre. Si vous travaillez avec d’autres types de formats, adaptez simplement l’extension à ce réglage, en fonction de vos besoins (par exemple, & gt; output.xml, & gt; output.html, & gt; output.py ... etc). Bonne chance! :)

Mise en surbrillance des mots du fichier de sortie

Donc, si je l'ai eu, vous voulez mettre en évidence les mots que vous avez recherchés. Encore une fois, cela ne peut pas être fait dans un fichier texte, simplement parce que c'est un texte brut. Cependant, vous pouvez y ajouter un format de manière très simple, par exemple en utilisant un codage HTML. Cela transformera votre sortie en un code html, et lorsque vous l'ouvrirez avec un programme capable d'interpréter le HTML (freeoffice writer, firefox et 10000 etceteras), vous verrez quelques mots surlignés.

Pour ce faire, disons que ceci est votre grep, exporté au format html:

ls | grep keytext > output.html

Et maintenant, vous voulez mettre en évidence keytext dans votre sortie. Vous pouvez utiliser sed pour le faire, comme:

sed -i 's/keytext/<font color="red">keytext<\/font>/g' output.html

Et violà, maintenant ton texte est surligné en rouge.

    
réponse donnée Rho 25.07.2014 - 11:23
la source

Lire d'autres questions sur les étiquettes