2008-11-30 7 views
0

J'essaye d'écrire un script Perl d'une ligne qui basculera une ligne dans un fichier de configuration de "commenté" à non et vice versa. Je donne les résultats suivants jusqu'à présent:Comment puis-je faire de ce doubleur Perl pour faire basculer un caractère en ligne dans un fichier?

perl -pi -e 's/^(#?)(\tDefaultServerLayout)/ ... /e' xorg.conf 

J'essaie de comprendre ce code à mettre dans la section de remplacement (...). Je voudrais que le remplacement insère un '#' s'il n'y en avait pas, et l'enlever s'il était apparié.

code pseudo:

if ($1 == '#') then 
    print $2 
else 
    print "#$2" 

Mon Perl est très rouillé, et je ne sais pas comment adapter cela en remplacement s///e.

Ma raison pour cela est de créer un seul script qui va changer (bascule) mes paramètres d'affichage entre deux mises en page. Je préférerais que cela soit fait en un seul script.

Je suis ouvert aux suggestions pour d'autres méthodes, mais je voudrais garder ceci un one-liner que je peux simplement inclure dans un script de coquille qui fait d'autres choses que je veux arriver quand je change des dispositions.

Répondre

12
perl -pi -e 's/^(#?)(?=\tDefaultServerLayout)/ ! $1 && "#" /e' foo 

Notez l'ajout de? = Pour simplifier la chaîne de remplacement en utilisant un look-ahead assertion.

Certains pourraient préférer s /.../ $ 1? "": "#"/e.

Questions connexes