Top-Themen

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

Mitglied: micneu

micneu (Level 2) - Jetzt verbinden

24.04.2012 um 12:43 Uhr, 3385 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
Vbs - simple XML Datei auslesen
gelöst Frage von DeeJayBeeXML4 Kommentare

Hallo zusammen, ich glaub, ich hab grad ne kleine Blockade oder denke viel zu kompliziert. Gegeben ist eine xml-Datei ...

Batch & Shell

Anfangstext bei einer xml Datei bearbeiten durch Batch Datei

gelöst Frage von GrauerStarBatch & Shell5 Kommentare

Hallo :D Ist das möglich so wie ich mir das vorstelle?: Eine Batch Datei die in einem Ordner automatisch ...

VB for Applications

Excel mit VBS bearbeiten und Speichern Unter

gelöst Frage von YannoschVB for Applications8 Kommentare

Hallo zusammen, stehe vor einer schnell zu lösenden Aufgabe & bin ein wenig überfordert. In einem Ordner mit ca. ...

VB for Applications

Per VBS bestimmten Knoten aus XML Datei entfernen

gelöst Frage von aletriVB for Applications9 Kommentare

Guten Morgen allerseits Mit diesem Script möchte ich bestimmten Knoten aus XML Datei entfernen. Der Script wird ohne Fehlermeldung ...

Neue Wissensbeiträge
Humor (lol)

WhatsApp-Nachrichten endlich auch per Bluetooth versendbar

Information von BassFishFox vor 21 MinutenHumor (lol)

Genau darauf habe ich gewartet! ;-) Der beliebte Messaging-Dienst WhatsApp erhält eine praktische neue Funktion: Ab dem nächsten Update ...

Google Android

Googles "Android Enterprise Recommended" für Unternehmen

Information von kgborn vor 12 StundenGoogle Android3 Kommentare

Hier eine Information, die für Administratoren und Verantwortliche in Unternehmen, die für die Beschaffung und das Rollout von Android-Geräten ...

Sicherheit

Intel gibt neue Spectre V2-Microcode-Updates frei (20.02.2018)

Information von kgborn vor 13 StundenSicherheit

Intel hat zum 20. Februar 2018 weitere Microcode-Updates für OEMs freigegeben, um Systeme mit neueren Prozessoren gegen die Spectre ...

Microsoft
ARD-Doku - Das Microsoft Dilemma
Tipp von Knorkator vor 16 StundenMicrosoft3 Kommentare

Hallo zusammen, vor einigen Tagen lief in der ARD u.a. Reportage. Das Youtube Video dazu dürfte länger verfügbar sein. ...

Heiß diskutierte Inhalte
Windows Server
AD DS findet Domäne nicht, behebbar?
Frage von schapitzWindows Server40 Kommentare

Guten Tag, ich habe bei einem Kunden ein Problem mit den AD DS. Umgebung ist folgende: Windows Server 2016 ...

Router & Routing
LANCOM VPN CLIENT einrichten
Frage von Finchen961988Router & Routing27 Kommentare

Hallo, ich habe ein Problem und hoffe ihr könnt mir helfen, wir haben einen Kunden der hat einen Speedport ...

Router & Routing
ISC DHCP 2 Subnetze
gelöst Frage von janosch12Router & Routing19 Kommentare

Hallo, ich betreibe bei mir im Netzwerk einen ISC DHCP Server auf Debian, der DHCP verwaltet aktuell ein /24 ...

Switche und Hubs
Cisco SG350X-48 AdminIP in anderes VLAN
Frage von lcer00Switche und Hubs14 Kommentare

Hallo zusammen, ich habe ein Problem mir einem Cisco SG350X-48 bei der Erstinstallation wurde eine IP 192.168.0.254 (Default VLAN ...