2017-09-24 3 views
0

J'ai réussi à écrire une longue ligne qui fonctionne bien pour mon usage. obtenir un fichier, et formater le texte pour être comme je le veux.Puis-je combiner une longue chaîne de commandes sed en quelque chose de plus court?

est-il possible de le rendre plus court?

wget http://user:[email protected]/details.cgx \ 
    && sed "s/value/\n/g" details.cgx >> step1 \ 
    && sed "s/text/</g" step1 >> step2 \ 
    && sed "s/id/</g" step2 >> step3 \ 
    && tr -d '<>/' <step3>> step4 \ 
    && sed "s/formFanLevel/FanLevel/g" step4 >> step5 \ 
    && sed '123,155d' step5 >> step6 \ 
    && sed '79,120d' step6 >> step7 \ 
    && sed '57,66d' step7 >> step8 \ 
    && sed '47,48d' step8 >> step9 \ 
    && sed '37,44d' step9 >> step10 \ 
    && sed '13,26d' step10 >> VMCDF.txt \ 
    && rm step* && rm details.cgx 
+0

A * moins * nous donner l'aimable autorisation de mise en forme lisible. –

+0

(Par "formatage lisible", je ne voulais pas dire backticks - je voulais dire les nouvelles lignes et l'indentation). –

+0

Donc, d'abord - vous vous rendez compte que vous pouvez donner 'sed' plus d'une commande, non? –

Répondre

0

Un bon début serait d'apprendre comment le pipe command (|) peut être utilisé pour passer la sortie d'un programme en entrée à l'autre - cela supprimerait la nécessité de créer, de référence et nettoyer tous les fichiers intermédiaires (step1 .. step10) depuis votre ligne de commande.

0

Vous pouvez écrire un script shell pouvant appliquer la même chaîne de commande à n'importe quel fichier, puis utiliser le script au lieu de taper toutes ces lignes.

Si, bien qu'improbable, vous utilisez toujours le même fichier, juste faire un alias pour en donnant un nom à la chaîne de commande, par exemple:

alias wgetsed='wget http://user:[email protected]/details.cgx \ 
    && sed "s/value/\n/g" details.cgx >> step1 \ 
    && sed "s/text/</g" step1 >> step2 \ 
    ... 
    && rm step* && rm details.cgx' 

Vous ajoutez ensuite le code ci-dessus pour ~ /. bash_rc pour le rendre permanent pour votre compte utilisateur.

1

Je pense que vous voulez ceci:

wget -O- http://user:[email protected]/details.cgx | sed -E ' 
    s/value/\n/g 
    s/text|id/</g 
    s,<>/,,g 
    s/form(FanLevel)/\1/g 
' | sed ' 
    13,26d 
    37,44d 
    47,48d 
    57,66d 
    79,120d 
    123,155d 
' > VMCDF.txt