2010-08-25 7 views
0

J'ai besoin d'un moyen de lire et de supprimer du texte entre deux chaînes différentes trouvées dans un fichier, puis supprimer les deux chaînes. Comme une "commande de coupe". Je voudrais que le texte soit stocké dans une variable.Lire et supprimer du texte entre deux chaînes en perl

J'ai vu le post sur la lecture de texte entre deux chaînes, mais je ne pouvais pas comprendre comment le supprimer aussi bien.

J'ai l'intention d'exécuter le texte stocké dans bash. L'efficacité est souhaitable. Ce script ne va pas être utilisé sur de gros fichiers, mais il peut être exécuté plusieurs fois de manière séquentielle, donc plus vite le script fonctionne mieux.

Le texte stocké comportera généralement des caractères spéciaux.

Merci

Répondre

0

Spécifiez le début et les cordes se terminant par l'environnement, et le fichier à utiliser sur la ligne de commande perl:

export START_STRING='abc def' 
export END_STRING='ghi jkl' 
perl -0777 -i -wpe's/\Q$ENV{START_STRING}\E(.*)\Q$ENV{END_STRING}\E/s;print STDERR $1' file_to_use 2>savedtext 
+0

quand je tape que invite de commande, il ne sauve pas le texte en savedtext. Quand je tape echo $ savedtext, j'obtiens un espace vide. Il supprime cependant le texte correct - mais seulement si string1 n'est pas le premier mot. Si string1 EST le premier mot, alors il supprime tout, mais toujours pas de texte sauvegardé. – Feynman

+0

@Feynman: le $ 1 est le caractère spécial avec le texte stocké – vol7ron

+0

Meilleur exemple: '$ text =" foostringbar "; $ text = ~ s/foo (. *?) bar // i; $ coupé = 1 $; print $ cut; ' – vol7ron

Questions connexes