Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen (A bis Z)

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, 3370 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: 64748
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
gelöst Vbs - simple XML Datei auslesen (4)

Frage von DeeJayBee zum Thema XML ...

VB for Applications
gelöst VBS Suchen und Ersetzen bei UTF8 XML Dateien funktioniert nicht (7)

Frage von Nexxudus zum Thema VB for Applications ...

VB for Applications
XML Datei auslesen mit Excel (10)

Frage von kaiuwe28 zum Thema VB for Applications ...

Neue Wissensbeiträge
Vmware

VMware Desktopprodukte sind verwundbar

Information von Penny.Cilin zum Thema Vmware ...

Datenschutz

Session-Replay: Viele beliebte Webseiten zeichnen jegliche Texteingabe auf

Information von Penny.Cilin zum Thema Datenschutz ...

Sicherheit

Zufällige Speicherzuweisung: Windows-Bug hebelt Sicherheitsmechanismus ASLR aus

Information von Penny.Cilin zum Thema Sicherheit ...

Multimedia

Raspberry Pi als Digital-Signage-Computer

(1)

Information von BassFishFox zum Thema Multimedia ...

Heiß diskutierte Inhalte
Router & Routing
gelöst Freigabe aus anderem Netz nicht erreichbar (44)

Frage von McLion zum Thema Router & Routing ...

Visual Studio
Vb.net-Tool zum Erzeugen einer Outlook-E-Mail (24)

Frage von ahstax zum Thema Visual Studio ...

Windows Netzwerk
Netzwerk Neustrukturierung (16)

Frage von IT-Dreamer zum Thema Windows Netzwerk ...

Windows Server
RDP macht Server schneller??? (15)

Frage von JaniDJ zum Thema Windows Server ...