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, 3350 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
VB for Applications
gelöst Excel mit VBS bearbeiten und Speichern Unter (8)

Frage von Yannosch zum Thema VB for Applications ...

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

Frage von Nexxudus zum Thema VB for Applications ...

XML
gelöst XML Datei per Skript ändern (12)

Frage von chrisen zum Thema XML ...

XML
gelöst XML Datei mit Powershell splitten (2)

Frage von LianenSchwinger zum Thema XML ...

Neue Wissensbeiträge
Windows Server

Umstellung SHA 1 auf SHA 2 - Migration der CA von CSP auf KSP

Tipp von Badger zum Thema Windows Server ...

Windows 10

Quato DTP94 unter Windows 10 x64 installieren und verwenden

Anleitung von anteNope zum Thema Windows 10 ...

Windows 10

Win10 1703 und Nutzerkennwörter bei Ersteinrichtung - erstaunliche Erkenntnis

(15)

Erfahrungsbericht von DerWoWusste zum Thema Windows 10 ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
CNC Maschinen verlieren Netzwerkverbindung (kurioser Fehler) (22)

Frage von NoHopeNoFear zum Thema LAN, WAN, Wireless ...

Webentwicklung
Aktuellen Mitarbeiter auf Homepage anzeigen (13)

Frage von alemanne21 zum Thema Webentwicklung ...

Windows Server
gelöst Parameter Übergabe Terminal Server (9)

Frage von ThomasKern zum Thema Windows Server ...

Batch & Shell
Anfängerfragen - Powershell - Mailboxvertretung im Pulk einrichten (8)

Frage von Yoshimitsu zum Thema Batch & Shell ...