Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Awk, perl, vbs - xml datei bearbeiten

Frage Linux

Mitglied: micneu

micneu (Level 2) - Jetzt verbinden

24.04.2012 um 12:43 Uhr, 3317 Aufrufe, 2 Kommentare

moin, habe hier eine log datei im xml format, und in der sind manchmal fehler (tags fehlern oder sind doppelt)

Also hier schonmal die grobe strucktur der xml-datei
01.
<transcript> 
02.
  <messages> 
03.
    <message> 
04.
      <to>ziel</to> 
05.
      <from>von</from> 
06.
      <body>text</body> 
07.
      <date>datum</date> 
08.
    </message> 
09.
    <message> 
10.
      <to>ziel</to> 
11.
      <from>von</from> 
12.
      <body>text</body> 
13.
      <date>datum</date> 
14.
    </message> 
15.
  </messages> 
16.
</transcript>
jetzt habe ich es das manchmal dieser block
01.
<transcript> 
02.
  <messages> 
03.
.... 
04.
  </messages> 
05.
</transcript>
in einer datei wiederholt, oder das das "<to>" fehlt aber das "ziel</to>" wurde geschrieben.

die dateien werden vom "Spark" erstellt.

jetzt war mein gedanke, das ich nach <transcript> <messages> suchen lasse, ist es mehr als einmal sollen alle gelöscht werden ausser das am anfang der datei, das gleiche mit dem ende der datei.

wie formuliere ich ein regex nach dem motto, suche mir alles was ".*</to>" und wo *"<to>"** nicht enthalten ist.

gruß michael
Mitglied: hmarkus
24.04.2012 um 15:43 Uhr
Hallo Michael,

Du kannst einfach nach dem Ausdruck "ziel</to>" am Zeilenanfang suchen.
 m/^ziel<\/to>/
Markus
Bitte warten ..
Mitglied: micneu
08.05.2012 um 17:37 Uhr
habe jetzt ein script in perl geschrieben, es behebt die fehler in den spark transcript dateien.

01.
#!/usr/bin/perl 
02.
## ---------------------------------------------------------------------------- 
03.
## Script Name: 	suchen_ersetzen_spark.pl 
04.
## CreationDate: 	04.2012 
05.
## Last Modified: 	08.05.2012 
06.
## Copyright: 		MN (c)2012 
07.
## Purpose: 		ersetzt in defekten spark transcript dateien doppelte tags  
08.
## ---------------------------------------------------------------------------- 
09.
use strict; 
10.
use warnings; 
11.
 
12.
# variablen deklarieren 
13.
our($SPARK,$string,$text,$Zaehler,@array,$GELAUFEN, $STDMINSEC, $SEKUNDEN_REST, $SEKUNDEN, $MINUTEN, $ZAHL); 
14.
my $st = time(); 
15.
## datei abfragen 
16.
 
17.
$SPARK = $ARGV[0]; 
18.
 
19.
if (!$ARGV[0]) { 
20.
	print "z. B.: $0 dateiname.xml > neuedatei.xml\n"; 
21.
	print "original datei löschen und neue datei den namen der original datei geben\n"; 
22.
        print "welche spark-datei bearbeiten: "; # datei abfragen 
23.
        $SPARK = <STDIN>; 
24.
        chop($SPARK); 
25.
26.
### prüft ob verzeichnis angelegt ist 
27.
if (-e "BAK"){ 
28.
} else { system("mkdir BAK"); } 
29.
 
30.
system("cp $SPARK BAK/$SPARK.bak"); ### bakup erstellen 
31.
open(INFILE,"BAK/$SPARK.bak") or die "Fehler beim Öffnen von $SPARK.bak: $!"; # datei öffnen 
32.
 
33.
open(OUTFILE,">","$SPARK") or die "Fehler beim Öffnen von Ausgabe Datei $SPARK: $!"; # datei öffnen 
34.
 
35.
 
36.
$string = do { local $/; <INFILE> }; # zeilenweise einlesen 
37.
$text = $string;  
38.
 
39.
 
40.
#### suchen und ersetzen start 
41.
## die regular expression müssen warscheinlich noch überarbeitet werden, es wird nicht alles gefunden was probleme macht in den transcript dateien 
42.
 
43.
$text =~ tr/\r//d; 
44.
$text =~ s/\n//g; 
45.
$text =~ s/>\s*</></g; 
46.
$text =~ s/<transcript>/<transcript>\n/g; 
47.
$text =~ s/<messages>/ <messages>\n/g; 
48.
$text =~ s/<message>/  <message>\n/g; 
49.
$text =~ s/<\/message>/  <\/message>\n/g; 
50.
$text =~ s/<to>/   <to>/g; 
51.
$text =~ s/<\/to>/<\/to>\n/g; 
52.
$text =~ s/<from>/   <from>/g; 
53.
$text =~ s/<\/from>/<\/from>\n/g; 
54.
$text =~ s/<body>/   <body>/g; 
55.
$text =~ s/<\/body>/<\/body>\n/g; 
56.
$text =~ s/<date>/   <date>/g; 
57.
$text =~ s/<\/date>/<\/date>\n/g; 
58.
$text =~ s/<\/messages>/ <\/messages>\n/g; 
59.
$text =~ s/<\/transcript>/<\/transcript>/g; 
60.
#### suchen und ersetzen ende 
61.
### array erstellen 
62.
@array = split(/\n/, $text); 
63.
for ($Zaehler=0; $Zaehler<@array; $Zaehler++){ 
64.
##### fehlendes <to> einfügen 
65.
	if ( $array[$Zaehler] =~ /<\/to[^>]*>/ ) { 
66.
		if ($array[$Zaehler] !~ /<to[^>]*>/ ){			 
67.
			print "fehlendes <to>: $Zaehler, $array[$Zaehler]\n"; 
68.
			$array[$Zaehler] = "   <to>$array[$Zaehler]"; 
69.
70.
71.
##### alle überzähligen <transcript> entfernen	 
72.
	if ( $array[$Zaehler] =~ /<transcript>/ ) { 
73.
		if ($Zaehler gt 0){ 
74.
			print "<transcript>: $Zaehler,$array[$Zaehler]\n"; 
75.
			$array[$Zaehler] = splice(@array,$Zaehler); 
76.
77.
78.
##### alle überzähligen <messages> entfernen 
79.
	if ( $array[$Zaehler] =~ /<messages>/ ) { 
80.
		if ($Zaehler gt 1){ 
81.
			print "<messages>: $Zaehler,$array[$Zaehler]\n";			 
82.
			$array[$Zaehler] = splice(@array,$Zaehler); 
83.
84.
85.
##### alle überzähligen </messages> entfernen 
86.
	if ( $array[$Zaehler] =~ /<\/messages>/ ) { 
87.
		if ($Zaehler lt $#array-1){ 
88.
			print "</messages>: $Zaehler,$array[$Zaehler]\n"; 
89.
			$array[$Zaehler] = splice(@array,$Zaehler); 
90.
91.
92.
 
93.
##### alle überzähligen <\transcript> entfernen 
94.
	if ( $array[$Zaehler] =~ /<\/transcript>/ ) { 
95.
		if ($Zaehler lt $#array){ 
96.
			print "</transcript>: $Zaehler,$array[$Zaehler]\n"; 
97.
			$array[$Zaehler] = splice(@array,$Zaehler); 
98.
99.
100.
#### ausgabe des inhalts in eine datei 
101.
	print OUTFILE "$array[$Zaehler]\n"; 
102.
103.
close OUTFILE; # datei schließen 
104.
close INFILE; # datei schließen 
105.
### stopuhr 
106.
$GELAUFEN = (time() - $st); 
107.
if ($GELAUFEN >= 3600) { 
108.
 
109.
	$GELAUFEN = ($GELAUFEN / 3600); 
110.
 
111.
	$STDMINSEC = "Stunden"; 
112.
 
113.
	} elsif ($GELAUFEN >= 60) { 
114.
		$GELAUFEN = ($GELAUFEN / 60);			 
115.
		$STDMINSEC = "Minuten"; 
116.
	} else {		 
117.
		$STDMINSEC = "Sekunden"; 
118.
119.
print "Benoetigte Zeit: $GELAUFEN $STDMINSEC\n"; 
120.
print "ist erledigt\n";
Bitte warten ..
Ähnliche Inhalte
XML
XML Datei Fehler? (1)

Frage von Patrick-IT zum Thema XML ...

Batch & Shell
Script zum XML Datei Umschreiben (12)

Frage von cberndt zum Thema Batch & Shell ...

PHP
gelöst Externe XML-Datei in PHP auslesen (18)

Frage von Akrosh zum Thema PHP ...

Windows Server
Windows Bereitstellungsdienst und .xml-Datei erstellen (1)

Frage von 131275 zum Thema Windows Server ...

Heiß diskutierte Inhalte
Exchange Server
gelöst Email in Exchange an 2ten Empfänger senden (18)

Frage von MultiStorm zum Thema Exchange Server ...

Weiterbildung
Gehaltsvorstellungen (14)

Frage von SYS64738 zum Thema Weiterbildung ...

Verschlüsselung & Zertifikate
gelöst Festplattenverschlüsselung im Ausland (13)

Frage von Nicolaas zum Thema Verschlüsselung & Zertifikate ...

Windows Server
gelöst Microsoft-Lizenz CALs und passendes Server-Betriebssystem (13)

Frage von planetIT2016 zum Thema Windows Server ...