2010-01-05 6 views
1

J'essaie d'automatiser un processus que je dois faire encore et encore dans lequel je dois analyser la sortie d'une fonction shell, chercher 5 choses différentes, puis les mettre sur un fichierFaire un flux complet de travail sur script bash

Je sais que je peux faire correspondre les modèles avec grep mais je ne sais pas comment stocker le résultat sur une variable afin que je puisse l'utiliser après :( Je dois également analyser cette même sortie pour obtenir les 5 autres valeurs

Je ne sais pas sur la façon d'utiliser la même sortie pour les 5 grep de que je dois faire et stocker 5 variables différentes pour après utilisation

Je sais que je dois créer un .sh agréable et bien rangé, mais je ne sais pas comment faire

im en train d'essayer cette

#!/bin/bash 
data=$(cat file) 
lol=$(echo data|grep red) 
echo $lol 

ne fonctionne pas, des idées?

Répondre

1

Vous pouvez utiliser la syntaxe suivante:

VAR=$(grep foo bar) 

ou bien:

VAR=`grep foo bar` 
+0

puis-je appeler grep sur un autre var? tel que VAR = $ (grep toto bar) VAR2 = $ (VAR | grep autre barre) ? – perrohunter

+0

Non, mais vous pouvez soit utiliser regexp correspondant à des variables ou (moins préférable pour moi) écrire une variable dans un fichier et grep cela. –

+1

Non mais vous pouvez faire écho que var et grep la sortie de echo: 'VAR2 = $ (echo $ VAR | grep autre)'. Notez le '$ VAR'. – slebetman

1

La meilleure chose à faire serait de rediriger la sortie de la fonction à un fichier. Vous pouvez ensuite exécuter plusieurs greps dessus et seulement supprimer le fichier une fois que vous avez terminé avec lui. Pour enregistrer la sortie, vous souhaitez utiliser la substitution de commande. Cela exécute une commande, puis convertit la sortie en paramètre de ligne de commande. Combiné avec l'affectation des variables que vous obtenez:

variable=$(grep expression file) 
3

vous devriez montrer quelques exemples de ce que vous voulez faire la prochaine fois ..

en supposant que vous shell fonction est appelée func1

func1(){ 
    echo "things i want to get are here" 
} 

func1 | grep -E "things|want|are|here|get" > outputfile.txt 

Mise à jour:

votre code

#!/bin/bash 
data=$(cat file) 
lol=$(echo data|grep red) 
echo $lol 

pratiquement signifie simplement que ce

lol=$(grep "red" file) 

ou

lol=$(awk '/red/' file) 

aussi, si vous envisagez d'utiliser bash, c'est une façon vous pouvez le faire

while read -r myline 
do 
    case "$myline" in 
     *"red"*) echo "$myline" >> output.txt 
    esac 
done <file 
1

Votre deuxième ligne est erroné . Changez-le en:

lol=$(echo "$data"|grep red) 
0

utilisez egrep istead de grep.

variable = $ (egrep "exp1 | exp2 | exp3 | exp4 | exp5" fichier)

+0

'grep' permet des rexps disjonctifs en utilisant" \ | " séparer les alternatives. C'est 'fgrep' qui a des chaînes fixes. –