[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Suchen und Ersetzen in großer XML-Datei mit kruden Zeichen - wie gehts am besten?



Hallo,

Agon S. Buchholz wrote:
>    "</string1>"
> 
> soll werden
> 
>    "<NEWLINE>[[{{string2|{{value}}}}]]<NEWLINE></string1>",

my $s1 = quotemeta '</string1>';
my $replacement = "\n[[{{string2|{{value}}}}]]\n";

s/$s1/$replacement/g;

wie du das in ein Perl-Script einbauen kannst hat Hans-Dietrich ja schon
geschrieben.

> Würde etwa folgendes funktionieren [2] [3], oder geht es unter Debian
> auch irgendwie einfacher (sprich: übersichtlicher)? Irgendwie macht mich
> diese Maskierung völlig wuschig ;-/
> 
>    perl -i.bak -p -e
> 's/\<\/string1\>/\n\[\[\{\{string2\|\{\{value\}\}\}\}\]\]\n\<\/string1\>/ig'
> FILE.xml

Der Replacement-Teil ist keine Regex sondern ein String, d.h. du musst
nicht jeden Mist escapen.


> Beim weiteren Googeln stieß ich auf [5], der die zu ersetzenden Strings
> nicht mit "\", sondern mit "|" trennt ("perl -p -i[.ext] -e 's|x|y|[ig]'
> filename") - was ist denn nun eigentlich richtig?

du kannst alles mögliche als delimiter nehmen:
s|foo|bar|g
s#foo#bar#g
s;foo;bar;g

usw.

P.S. wenn das dein Unicode zerschiessen sollte (unwahrscheinlich...),
dann kannst du den String codieren:

use Encode;
while (my $line = <$in>){
    $line = decode("utf8", $line);
    # hier Ersetzungen durchführen
    print $out decode("utf8", $line);
}

HTH,
Moritz

-- 
Moritz Lenz
http://moritz.faui2k3.org/ -  http://sudokugarden.de/ - http://perl-6.de/

Attachment: signature.asc
Description: OpenPGP digital signature


Reply to: