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

Frage Linux

Suche Code-Schnippsel für die Konsole für massenhaftes Inhaltsersetzen

Mitglied: 16568

16568 (Level 4)

14.05.2013 um 14:50 Uhr, 1930 Aufrufe, 5 Kommentare

Hallo zusammen,

vielleicht kennt jemand das Problem:
in verschiedenen Dateien muß Text ersetzt werden.
Über die Konsole.
Es ist nicht ein Wort, sondern ein richtig ellenlanger Absatz.
Es gibt aber eine Start- und End-Marke.

Hat hierzu jemand schon einen Schnippsel, der den zu ersetzenden Text aus Datei A holt, und den Lückenfüller aus Datei B?
grep, find, sed und awk sind meine Freunde, jedoch habe ich einen Abschnitt von ca. 200 Zeilen, der in ca. 2.000 Dateien ersetzt werden muß, und dummerweise enthält der mehrere Sonderzeichen...

Leider sind das ein paaaaar GB an Daten, und die lade ich mir nur ungern komplett runter, um sie dann durch geeignete Programme auf meiner Kiste durchzuforsten


Anfang des zu ersetzenden Textes:
<? /* Kommentar */

Ende des zu ersetzenden Textes:
/* Ende Codeblock */ ?>

Wird ersetzt durch:
<? /* Kommentar neu */>
hier PHP-Code
/* Ende neuer Kommentar */ ?>


Any clues?


Grüße

Lonesome Walker
Mitglied: 64748
14.05.2013 um 16:17 Uhr
Hallo Lonesome Walker,

ist denn der neue Text bei jedem Vorkommen ein anderer? oder anders gefragt, sind A und B jeweils ein Datei-Paar und davon gibt es viele? oder gibt es nur eine Datei B?

Zum Vorgehen. Ich mach sowas mit Perl. Wenn man dort
undef $/ ;
setzt, werden die Zeilentrenner nicht mehr als Trenner für die Strings benutzt und man kann eine Datei komplett als String einlesen. Damit ist das ersetzen mittels s/altertext/neuertext/g relativ simpel.

Wenn Du mit sed arbeitest, wird es wohl etwas umständlicher. Ich würde Dir raten hier unter Punkt 4. Examples oder hier mal nach fertigen Skripts zu suchen (wenn Du diese Seiten nicht sowieso schon kennst).

Wenn ich mal eine Beispieldatei sehen könnte, dann würde ich ein bisschen Perlcode posten.

Markus
Bitte warten ..
Mitglied: 16568
15.05.2013, aktualisiert um 10:02 Uhr
Zitat von 64748:
ist denn der neue Text bei jedem Vorkommen ein anderer? oder anders gefragt, sind A und B jeweils ein Datei-Paar und davon gibt es
viele? oder gibt es nur eine Datei B?

Es gibt nur eine Datei B

Zum Vorgehen. Ich mach sowas mit Perl.

Beispiel?
Das Problem ist halt, ich hab in den Expressions mehrere / * > < ; und & da es sich eben um PHP-Code handelt;
wenn ich da jetzt anfange zu escapen, bin ich wahrscheinlich am Wochenende damit fertig :-P

Seiten nicht sowieso schon kennst).

Jupp, aber sed ist da nicht mein Freund.

Wenn ich mal eine Beispieldatei sehen könnte, dann würde ich ein bisschen Perlcode posten.

Würde ich gerne, aber leider habe ich da für Live-Code eine Verschwiegenheitserklärung, you know...

Aber Beispielcode darf man ja:
01.
<?php 
02.
 
03.
/* Inkludierung von notwendigen Files Anfang *
04.
 
05.
include('1.inc.php'); 
06.
include('2.inc.php'); 
07.
include('3.inc.php'); 
08.
 
09.
/* Inkludierung von notwendigen Files Ende *
10.
 
11.
/* Deklaration von Klassen Anfang *
12.
 
13.
class TestClass { 
14.
 
15.
public $strPub = "Ich bin public"
16.
protected $strProt = "Ich bin protected"
17.
private $strPriv = "Ich bin private"
18.
 
19.
function showVars() { 
20.
 
21.
echo "Das sieht die Klasse TestClass:\n"
22.
echo "\$strPub: $this->strPub\n"
23.
echo "\$strProt: $this->strProt\n"
24.
echo "\$strPriv: $this->strPriv\n"
25.
echo "\n"
26.
27.
 
28.
29.
 
30.
/* Deklaration von Klassen Ende *
31.
 
32.
?>
Du siehst, alles hat Anfang und Ende, d.h. ich kann das sehr genau segmentieren.


Lonesome Walker
Bitte warten ..
Mitglied: 64748
15.05.2013 um 10:32 Uhr
Wenn ich nachher zu hause bin werde ich mal ein Skript basteln.

Man kann bei Perl den Trenner für die Ersetzungen selbst festlegen. Wenn also z.B. kein '#' im Text vorkommt, dann nehme ich das.

Markus
Bitte warten ..
Mitglied: 16568
15.05.2013 um 11:50 Uhr
Zitat von 64748:
Wenn ich nachher zu hause bin werde ich mal ein Skript basteln.

Da bin ich mal gespannt...

Man kann bei Perl den Trenner für die Ersetzungen selbst festlegen. Wenn also z.B. kein '#' im Text vorkommt, dann
nehme ich das.

Ja, aber genau das ist ja mein Problem:
es kommen so ziemlich ALLE Sonderzeichen vor, da das ein etwas umfangreicherer Codeblock ist.
Mir hat sich bis heute zwar nicht erschlossen, warum man da nicht mit include arbeitet wie man es davor auch getan hat, aber scheinbar sind das mehrere Verzeichnisse, die zu unterschiedlichen Domains auflösen.


Lonesome Walker
Bitte warten ..
Mitglied: 64748
15.05.2013, aktualisiert um 13:53 Uhr
Also wenn Datei A so aussieht
bla blubber 
<? /* Kommentar */ 
<?php 
 
/* Inkludierung von notwendigen Files Anfang */ 
 
include('1.inc.php'); 
include('2.inc.php'); 
include('3.inc.php'); 
 
/* Inkludierung von notwendigen Files Ende */ 
 
/* Deklaration von Klassen Anfang */ 
 
class TestClass { 
 
public $strPub = "Ich bin public"; 
protected $strProt = "Ich bin protected"; 
private $strPriv = "Ich bin private"; 
 
function showVars() { 
 
echo "Das sieht die Klasse TestClass:\n"; 
echo "\$strPub: $this->strPub\n"; 
echo "\$strProt: $this->strProt\n"; 
echo "\$strPriv: $this->strPriv\n"; 
echo "\n"; 
 
 
/* Deklaration von Klassen Ende */ 
 
?> 
/* Ende Codeblock */ ?> 
 
bla blubber
und Datei B so aussieht:
hier steht nur text 
<? /* Kommentar neu */> 
und hier irgendwas 
und so weiter 
und so weiter 
und so weiter 
und so weiter 
und so weiter 
und so weiter 
und so weiter 
und so weiter 
und so weiter 
und so weiter 
verschiedene Zeichen 
#/;\[]{}()%&/()=?$§"! 
und so weiter 
und so weiter 
und so weiter 
und so weiter 
und so weiter 
und so weiter 
und so weiter 
und so weiter 
und so weiter 
und so weiter 
und so weiter 
und so weiter 
und so weiter 
hier PHP-Code 
/* Ende neuer Kommentar */ ?> 
hier steht nur text 
hier steht nur text 
hier steht nur text 
hier steht nur text 
hier steht nur text 
hier steht nur text 
hier steht nur text 
hier steht nur text
dann führt dieser Code
01.
#!/usr/bin/perl 
02.
 
03.
use strict ; 
04.
use warnings ; 
05.
use feature 'say' ; 
06.
 
07.
 
08.
open DATEI_B, "datei_b.txt" or die "geht nicht $!\n" ; 
09.
undef $/ ; 
10.
my $newtxt ; 
11.
while ( <DATEI_B> ) { 
12.
    if ( $_ =~ m;(\<\?\s/\*\sKommentar\sneu\s\*/\>.*?/\*\sEnde\sneuer\sKommentar\s\*/\s\?\>);gs ) { 
13.
        $newtxt = $1 ; 
14.
15.
16.
 
17.
open DATEI_A, "datei_a.html" or die "geht nicht $!\n" ; 
18.
my $datei_a = <DATEI_A> ; 
19.
undef $/ ; 
20.
$datei_a =~ s;\<\?\s/\*\sKommentar\s\*/.*?/\*\sEnde\sCodeblock\s\*/\s\?\>;$newtxt;gs ; 
21.
 
22.
say $datei_a ;
zu dieser Ausgabe
bla blubber 
<? /* Kommentar neu */> 
und hier irgendwas 
und so weiter 
und so weiter 
und so weiter 
und so weiter 
und so weiter 
und so weiter 
und so weiter 
und so weiter 
und so weiter 
und so weiter 
verschiedene Zeichen 
#/;\[]{}()%&/()=?$§"! 
und so weiter 
und so weiter 
und so weiter 
und so weiter 
und so weiter 
und so weiter 
und so weiter 
und so weiter 
und so weiter 
und so weiter 
und so weiter 
und so weiter 
und so weiter 
hier PHP-Code 
/* Ende neuer Kommentar */ ?> 
 
bla blubber
Was ungefähr Deinen Vorstellungen entsprechen müsste.

Nun kann man natürlich noch dafür sorgen, dass alle Dateien geöffnet werden anstatt nur eine, die Ausgabe wieder in die Datei geschrieben wird usw. Aber ich hatte Dich so verstanden, dass die regex das eigentliche Problem sind.

Markus
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
PS: Suche "eleganteren" Code
gelöst Frage von KraemerBatch & Shell10 Kommentare

Moin zusammen, ich bin auf der Suche nach einem "eleganteren" Code (Powershell). Es geht um folgendes: in einer Schleife ...

RedHat, CentOS, Fedora
Probleme mit Updates - massenhaft Konflikte
Frage von harald.schmidtRedHat, CentOS, Fedora3 Kommentare

Hallo ich habe leider ein Problem, wenn ich per yum update updaten möchte. Woher kommen diese massenhaften Konflikte und ...

Batch & Shell
Powershell zwei Schnippsel zusammenfügen
gelöst Frage von JoshuaTreeBatch & Shell10 Kommentare

Get-XAApplication -FolderPath "applications\test" Das ist der gesamte Aufruf Get-XAApplication -FolderPath "applications\test" ist der erste Teil und gibt alle Anwendungen ...

Rechtliche Fragen
IT-Prozess für das massenhafte löschen von Mails
Frage von VancouveronaRechtliche Fragen1 Kommentar

Hallo zusammen, heute mal eine Frage in die versammelte runde, die nix mit Technik, sondern mehr mit Verfahren und ...

Neue Wissensbeiträge
Linux

Meltdown und Spectre: Linux Update

Information von Frank vor 20 StundenLinux

Meltdown (Variante 3 des Prozessorfehlers) Der Kernel 4.14.13 mit den Page-Table-Isolation-Code (PTI) ist nun für Fedora freigegeben worden. Er ...

Tipps & Tricks

Solutio Charly Updater Fehlermeldung: Das Abgleichen der Dateien in -Pfad- mit dem Datenobject ist fehlgeschlagen

Tipp von StefanKittel vor 1 TagTipps & Tricks

Hallo, hier einmal als Tipp für alle unter Euch die mit der Zahnarztabrechnungssoftware Charly von Solutio zu tun haben. ...

Sicherheit

Meltdown und Spectre: Wir brauchen eine "Abwrackprämie", die die CPU-Hersteller bezahlen

Information von Frank vor 1 TagSicherheit12 Kommentare

Zum aktuellen Thema Meltdown und Spectre: Ich wünsche mir von den CPU-Herstellern wie Intel, AMD oder ARM eine Art ...

Sicherheit

Meltdown und Spectre: Realitätscheck

Information von Frank vor 1 TagSicherheit9 Kommentare

Die unangenehme Realität Der Prozessorfehler mit seinen Varianten Meltdown und Spectre ist seit Juni 2017 bekannt. Trotzdem sind immer ...

Heiß diskutierte Inhalte
Sicherheit
Meltdown und Spectre: Die machen uns alle was vor
Information von FrankSicherheit25 Kommentare

Aktuell sieht es in den Medien so aus, als hätten die Hersteller wie Intel, Microsoft und Co den aktuellen ...

Netzwerke
Packet loss bei "InternetLeitungsvollauslastung"
gelöst Frage von Freak-On-SiliconNetzwerke17 Kommentare

Servus; Ja der Titel klingt komisch, is aber so. Wenn die Internetleitung voll ausgelastet ist, hab ich extreme packet ...

Ubuntu
Ubuntu - Starter für nicht vertrauenswürdige Anwendungen
Frage von adm2015Ubuntu17 Kommentare

Hallo zusammen, Ich verwende derzeit die Ubuntu Versionen 17.10 bzw. im Test 18.04. Ich habe mehrere .desktop Dateien in ...

Windows 10
Automatische daten kopieren, USB zu USB unter Win10 im Hintergrund
Frage von DerEisigeWindows 1016 Kommentare

Hallo Leute, ich bin auf der Suche nach einem Skript, dass von einem USB Stick automatisch nach dem einstecken ...