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

Suchen und ersetzen über mehrere zeilen (awk oder sed)

Frage Entwicklung Batch & Shell

Mitglied: micneu

micneu (Level 2) - Jetzt verbinden

04.04.2011, aktualisiert 19:33 Uhr, 5827 Aufrufe, 2 Kommentare

wie oben schon angedeutet, ich benötige eure unterstützung.
ich möchte mit awk oder sed einige dateien (über 100) bearbeiten in der ich einen bereich löschen möchte.
und irgend wie bekomme ich den regulären ausdruck nicht hin.

Hier meine Daten, ist eine automatisch generierte datei von wpkg:
<wpkg><package id="acrobat" name="Acrobat Reader 8.1.2" revision="812" reboot="false" priority="10">
<check type="uninstall" condition="exists" path="Adobe Reader 8.1.2 - Deutsch"/>
<install cmd="msiexec /q /i &quot;%SOFTWARE%\pkg\adobe\AcroRead.msi&quot; allusers=1">
<exit code="0"/>
</install>
<remove cmd="MsiExec.exe /q /x{AC76BA86-7AD7-1031-7B44-A70500000002}"/>
<upgrade cmd="msiexec /q /i &quot;%SOFTWARE%\pkg\adobe\AcroRead.msi&quot; allusers=1">
<exit code="0"/>
<exit code="3010"/>
</upgrade>
</package>
><package id="ReportViewer" name="Microsoft Report Viewer Redistributable 2008" revision="2" reboot="false" priority="10">
<check type="uninstall" condition="exists" path="Microsoft Report Viewer Redistributable 2008"/>
<install cmd="%SOFTWARE%\pkg\wsus\ReportViewer.exe /q">
<exit code="0"/>
</install>
<remove cmd="%SOFTWARE%\pkg\wsus\ReportViewer.exe /qu"/>
</package>
<package id="jre" name="Java Runtime Environment 1.5.0_08" revision="1" reboot="true" priority="2">
<check type="uninstall" condition="exists" path="J2SE Runtime Environment 5.0 Update 8"/>
<install cmd="msiexec /q /i %SOFTWARE%\pkg\java\jre1.5.0_08.msi allusers=1 REBOOT=Suppress CUSTOM=1 IEXPLORER=1 MOZILLA=1 NETSCAPE6=1 JAVAUPDATE=0 ADDLOCAL=ALL">
<exit code="0"/>
</install>
<remove cmd="MsiExec.exe /q /x{3248F0A8-6813-11D6-A77B-00B0D0150080} REBOOT=Suppress"/>
<upgrade cmd=""/>
</package>
<package id="ntp-client" name="ntp client configuration" revision="2" reboot="false" priority="1" execute="once">
<install cmd="%SOFTWARE%\pkg\ntp\install.bat"/>
<upgrade cmd="%SOFTWARE%\pkg\ntp\install.bat"/>
<remove cmd="%SOFTWARE%\pkg\ntp\uninstall.bat"/>
</package>

und den bereich will ich löschen:

<package id="jre" name="Java Runtime Environment 1.5.0_08" revision="1" reboot="true" priority="2">
<check type="uninstall" condition="exists" path="J2SE Runtime Environment 5.0 Update 8"/>
<install cmd="msiexec /q /i %SOFTWARE%\pkg\java\jre1.5.0_08.msi allusers=1 REBOOT=Suppress CUSTOM=1 IEXPLORER=1 MOZILLA=1 NETSCAPE6=1 JAVAUPDATE=0 ADDLOCAL=ALL">
<exit code="0"/>
</install>
<remove cmd="MsiExec.exe /q /x{3248F0A8-6813-11D6-A77B-00B0D0150080} REBOOT=Suppress"/>
<upgrade cmd=""/>
</package>

01.
regex: (<package id="jre" name="Java Runtime Environment 1.5.0_08".*\s+.*\s+.*\s+.*\s+.*\s+.*\s+.*\s+.*)
wie kann ich das kürzer und flexibler machen?
ich würde es gerne so lösen:
01.
regex: (<package id="jre" name="Java Runtime Environment 1.5.0_08".*\s+.*<\/package>)
so das ich alles zwischen package.... und \package> finde.

hoffe hier kann mir jemand helfen.

gruß michael
Mitglied: micneu
05.04.2011 um 11:46 Uhr
hallo leute,

ich habe etwas gesucht und sowas gefunden:

01.
#!/usr/bin/perl -w 
02.
 
03.
open(INFILE, "<test.xml") or die "Can't open input.txt: $!"; 
04.
open(OUTFILE, ">output.txt") or die "Can't open output.txt: $!"; 
05.
 
06.
my $string = do { local $/; <INFILE> }; 
07.
my $text = $string; 
08.
$text =~ s/(<package id="jre" name="Java Runtime Environment.*<\/package>)//ms; 
09.
print OUTFILE $text; 
10.
close INFILE; 
11.
close OUTFILE;
soweit klappt es nur das alles bis zum letzten </package> gelöscht wird.
alles was zwischen "<package id="jre" name="Java "" und "</package>".

wie mache ich das.

gruß michael
Bitte warten ..
Mitglied: DauDau
29.06.2011 um 12:36 Uhr
Hallo Michael,
ich nehme an, dass Du mit
"soweit klappt es nur das alles bis zum letzten </package> gelöscht wird.
alles was zwischen "<package id="jre" name="Java "" und "</package>"."

sagen wolltest, dass der reguläre Ausdruck nicht richtig funktioniert, weil er nicht nur bis zum nächsten "</package>"-Element alles löscht, sondern alles bis zum letzten Auftauchen von "</package>" im Text.

Um dieses "gierige" Verhalten von Quantifiern (*,+) zu ändern, kann man in Perl ein Fragezeichen hinter den Quantifier stellen:
$text =~ s/(<package id="jre" name="Java Runtime Environment.*?<\/package>)//ms;

Ich habe es probiert und es funktioniert.
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
gelöst Suchen und Ersetzen mehrerer Suchbegriffe per Batch (4)

Frage von makroll10 zum Thema Batch & Shell ...

Batch & Shell
Zeile eine Datei per batch ersetzen (2)

Frage von duckknight zum Thema Batch & Shell ...

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

Frage von Nexxudus zum Thema VB for Applications ...

Neue Wissensbeiträge
Windows 10

Erneutes Starten eines Programmes mit Admin-Rechten

Tipp von Estefania zum Thema Windows 10 ...

Ubuntu

Ubuntu 17.10 steht zum Download bereit

Information von Frank zum Thema Ubuntu ...

Datenschutz

Autofahrer-Pranger - Bewertungsportal illegal

(8)

Information von BassFishFox zum Thema Datenschutz ...

Windows 10

Neues Win10 Funktionsupdate verbuggt RemoteApp

(3)

Information von thomasreischer zum Thema Windows 10 ...

Heiß diskutierte Inhalte
Router & Routing
Allnet - VDSL2 Modem - SFP (mini-GBIC) (20)

Frage von Dobby zum Thema Router & Routing ...

Voice over IP
DeutschlandLAN IP Voice Data M Premium, Erfahrung mit Faxgeräte? (17)

Frage von liquidbase zum Thema Voice over IP ...

TK-Netze & Geräte
TK-Anlage VoIP - DECT Erweiterung (16)

Frage von Lynkon zum Thema TK-Netze & Geräte ...