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, 3310 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 ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ä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
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (17)

Frage von liquidbase zum Thema Windows Update ...