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

Bash: suchen und ersetzen

Frage Linux Linux Tools

Mitglied: SIPSIP

SIPSIP (Level 1) - Jetzt verbinden

06.02.2014 um 09:34 Uhr, 2772 Aufrufe, 14 Kommentare, 2 Danke

Hallo zusammen

Möchte aus einer riesigen HTML Datei folgenden Strings ersetzen: ^M\

Nun habe ich dieses kleine Script erstellt, wobei ich die Strings mit einem a oder am besten wäre mit gar keinem Zeichen zu ersetzen
01.
#!/bin/bash 
02.
 
03.
string=^M\ 
04.
newstring=a 
05.
 
06.
echo "sed 's|$string|$newstring|'" 
07.
sed 's|$string|$newstring|'
Nur passiert leider rein gar nichts... nicht einmal eine Fehlermeldung.

Ich versuchte auch schon im sed Befehl anstatt die Pipe | ein normales Slash Zeichen.

Was mache ich falsch?
Mitglied: hajowe
06.02.2014 um 09:49 Uhr
hi SIP SIP

In-Place-Editing[Bearbeiten]

Aufgrund der Art wie sed Textmanipulationen durchführt, kann dies nicht direkt auf der Eingabedatei geschehen. Als Ausgabe wird eine von dieser getrennte Datei benötigt, die gegebenenfalls danach über die Eingangsdatei kopiert wird.

sed '...<Anweisungen>...' /path/to/inputfile > /path/to/output
Bitte warten ..
Mitglied: Lochkartenstanzer
06.02.2014, aktualisiert um 11:01 Uhr
Zitat von SIPSIP:

Möchte aus einer riesigen HTML Datei folgenden Strings ersetzen: ^M\


wenn Du einen backslash ersetzen willst, mußt Du den "escapen" und ^ hat eine Sonderbedeutung in regulären Ausdrücken.

echo "abcde^m\blabala" | sed -e "s:\^m\\\:a:g"
lks
Bitte warten ..
Mitglied: SIPSIP
06.02.2014 um 10:53 Uhr
Mein Script sieht nun folgendermassen aus:
01.
#!/bin/bash 
02.
 
03.
echo "replacing string '^M\' with the lettre 'a'" 
04.
 
05.
sed -e "s:\^M\\\:a:g"
Komischerweise tut sich aber noch nichts, also hab ich zum testen nur einen kleinen Teil des HTML Codes in einer Seperaten Datei gespeicht wobei aber trotzdem nichts geschieht.

Kann es sein, dass es Probleme gibt mit all den anderen Sonderzeichen?

hier noch die Testdatei:
01.
an class="Section1"><span class="Haupttitel">blabla<br /></span><br />blabla</span></p>^M\ 
02.
<p><span class="Section1"><br /><a href="link">1. </a><a href="index.php? 
03.
<p><span class="Section1"><br /></span></p>^M\ 
04.
<p><span class="Ueberschrift">titel</span></p>^M\ 
05.
<p><span class="Section1"><br /></span></p>^M\ 
06.
<p class="Haupttext"> </p>^M\ 
07.
<p class="Haupttext">blabla</p>^M\ 
08.
<p class="Haupttext"> </p>^M\ 
09.
<p class="Haupttext">text</p>^M\ 
10.
<p class="Haupttext"> </p>^M\ 
11.
<p><span class="Section1"><span class="Haupttext">titel</span><br /></span></p> 
12.
<p class="Ueberschrift"> </p>^M\
Bitte warten ..
Mitglied: Lochkartenstanzer
06.02.2014 um 11:00 Uhr
Bei mir kommt folgendes raus:

lks@roku:~$ cat tmp/testdatei.txt | sed -e "s:\^M\\\:a:g" 
an class="Section1"><span class="Haupttitel">blabla<br /></span><br />blabla</span></p>a 
<p><span class="Section1"><br /><a href="link">1. </a><a href="index.php? 
<p><span class="Section1"><br /></span></p>a 
<p><span class="Ueberschrift">titel</span></p>a 
<p><span class="Section1"><br /></span></p>a 
<p class="Haupttext"> </p>a 
<p class="Haupttext">blabla</p>a 
<p class="Haupttext"> </p>a 
<p class="Haupttext">text</p>a 
<p class="Haupttext"> </p>a 
<p><span class="Section1"><span class="Haupttext">titel</span><br /></span></p> 
<p class="Ueberschrift"> </p>a
wobei testdatei.xt Deine obige datei ist, per copy und paste aus dem quelltext in eine datei gepackt.

lks
Bitte warten ..
Mitglied: SIPSIP
06.02.2014 um 11:13 Uhr
stimmt... jedoch sobald ich es als Scritp versuche, klappt es nichtmehr...

01.
#!/bin/bash 
02.
 
03.
echo "replacing string '^M\' with the lettre 'a'" 
04.
 
05.
sed -e "s:\^M\\\:a:g" > result.csv
Bitte warten ..
Mitglied: Lochkartenstanzer
06.02.2014 um 11:26 Uhr
Irgendetwas machst du falsch:

 
lks@roku:~$ cat tmp/testdatei.txt  
an class="Section1"><span class="Haupttitel">blabla<br /></span><br />blabla</span></p>^M\ 
<p><span class="Section1"><br /><a href="link">1. </a><a href="index.php? 
<p><span class="Section1"><br /></span></p>^M\ 
<p><span class="Ueberschrift">titel</span></p>^M\ 
<p><span class="Section1"><br /></span></p>^M\ 
<p class="Haupttext"> </p>^M\ 
<p class="Haupttext">blabla</p>^M\ 
<p class="Haupttext"> </p>^M\ 
<p class="Haupttext">text</p>^M\ 
<p class="Haupttext"> </p>^M\ 
<p><span class="Section1"><span class="Haupttext">titel</span><br /></span></p> 
<p class="Ueberschrift"> </p>^M\ 
 
 
lks@roku:~$ cat tmp/testsed.sh  
#!/bin/bash 
 
sed -e "s:\^M\\\:a:g" 
 
 
lks@roku:~$ cat tmp/testdatei.txt | tmp/testsed.sh  
an class="Section1"><span class="Haupttitel">blabla<br /></span><br />blabla</span></p>a 
<p><span class="Section1"><br /><a href="link">1. </a><a href="index.php? 
<p><span class="Section1"><br /></span></p>a 
<p><span class="Ueberschrift">titel</span></p>a 
<p><span class="Section1"><br /></span></p>a 
<p class="Haupttext"> </p>a 
<p class="Haupttext">blabla</p>a 
<p class="Haupttext"> </p>a 
<p class="Haupttext">text</p>a 
<p class="Haupttext"> </p>a 
<p><span class="Section1"><span class="Haupttext">titel</span><br /></span></p> 
<p class="Ueberschrift"> </p>a 
Bitte warten ..
Mitglied: SIPSIP
06.02.2014 um 11:36 Uhr
komisch...
sobald ich den Grund dafür gefunden habe melde ich mich nochmal.
Danke für deine Hilfe
Bitte warten ..
Mitglied: Lochkartenstanzer
06.02.2014 um 11:43 Uhr
Zitat von SIPSIP:

komisch...

Nimm mal einfach meine Dateien oben per copy und paste und versuche es damit.

Vielleicht sind in deinen dateien noch zusätzliche zeichen, die irgendwie querschießen.

sobald ich den Grund dafür gefunden habe melde ich mich nochmal.

Wäre interessant zu wissen, was bei dir anders ist.

Danke für deine Hilfe

Gern geschehen.

lks
Bitte warten ..
Mitglied: SIPSIP
06.02.2014 um 11:50 Uhr
Zitat von SIPSIP:

komisch...
sobald ich den Grund dafür gefunden habe melde ich mich nochmal.
Danke für deine Hilfe

Es funktioniert nun
musste das scritp noch ein Wenig erweitern

#!/bin/bash

cat /tmp/test.csv | sed -e "s:\^M\\\:a:g" >result.csv

Danke
Bitte warten ..
Mitglied: hajowe
06.02.2014, aktualisiert um 13:56 Uhr
Zitat von SIPSIP:

> Zitat von SIPSIP:
>
> komisch...
> sobald ich den Grund dafür gefunden habe melde ich mich nochmal.
> Danke für deine Hilfe

Es funktioniert nun
musste das scritp noch ein Wenig erweitern

#!/bin/bash

cat /tmp/test.csv | sed -e "s:\^M\\\:a:g" >result.csv

Danke
Lies mal meinen Kommentar da habe ich dir es geschrieben das du in eine die Eingabe und das Ergebnis in andere Datei schreiben mußt.
Bitte warten ..
Mitglied: SIPSIP
07.02.2014, aktualisiert um 09:46 Uhr
Zitat von hajowe:
Lies mal meinen Kommentar da habe ich dir es geschrieben das du in eine die Eingabe und das Ergebnis in >andere Datei schreiben mußt.
Stimmt habs erst jetzt gesehen Danke

Ich weiss zwar das dies nicht zu diesem Thema passt aber vielleicht weiss einer von euch bescheid was ich hier falsch mache...
Hab ein PHP Script das eigentlich macht was ich will nur gibt es mir die Ausgabe nur als echo aus aber eigentlich will ich, dass es mir das Ergebniss auch in eine Datei schreibt.

01.
#!/usr/bin/php 
02.
<?php 
03.
 
04.
$datei = "php-result.csv"; 
05.
$fp = fopen($datei, "w+"); 
06.
 
07.
if ($argc <= 1) { 
08.
	echo "Expected a file at argument 1, but it doesn't exist.\n"; 
09.
	exit; 
10.
11.
 
12.
$file = $argv[1]; 
13.
if (!file_exists($file)) { 
14.
	echo "No such file. " . $file . "\n"; 
15.
16.
$content = file_get_contents($file); 
17.
$data = array(); 
18.
if (preg_match_all("/<\s*td\s+valign\s*=\s*\"\"top\"\"\s*>(.*)\s*\<\s*\/td\s*\>/iUs", $content, $matches)) { 
19.
	foreach ($matches[1] AS $entry) { 
20.
		$entry = trim($entry); 
21.
		if (preg_match("/\<p class\=\"\"Untertitel\"\"\>(.+)\<\/p\>.*\<p class\=\"\"Haupttext\"\"\>([^<]+@[^<]+)\<\/p\>/iUs", $entry, $entry_match)) { 
22.
			$data[] = array( 
23.
				'name' => strip_tags($entry_match[1]), 
24.
				'email' => strip_tags($entry_match[2]), 
25.
			); 
26.
27.
28.
29.
echo "NAME;EMAIL\n"; 
30.
foreach ($data as $person_data) { 
31.
	echo '"' . $person_data['name'] . '";"' . $person_data['email'] . "\"\n"; 
32.
33.
 
34.
fwrite($fp,"\n"); 
35.
fclose($fp); 
36.
?> 
Die nötige Syntax ist die am Anfang und Ende aber ich bekomm nur ein leeres csv zurück...
Bitte warten ..
Mitglied: hajowe
07.02.2014 um 10:30 Uhr
Servus

Probiere mal deine dinge in eine Neue Datei zu schreiben
echo „VARIABLE“ > deinedatei.txt

Wenn ich es richtig sehe liest du die Datei und willst dann in die identische Datei wieder schreiben.
Könnte das Problem sein.

Kann sein da du die vorher zum lesen öffnest das du diese erst schliessen und zum Schreiben neu aufmachen mußt
Dann geht die aber denke ich der Inhalt flöten.


Gruß
Bitte warten ..
Mitglied: SIPSIP
07.02.2014 um 10:43 Uhr
Zitat von hajowe:
Probiere mal deine dinge in eine Neue Datei zu schreiben
echo „VARIABLE“ > deinedatei.txt

Danke für die schnelle Antwort, PHP erkennt > nicht als Syntax...

Hier noch die Quelle woher ich dieses Komando habe:
http://www.tutorials.de/content/504-textdateien-schreiben-lesen-anfuege ...
Bitte warten ..
Mitglied: hajowe
07.02.2014, aktualisiert um 11:21 Uhr
Pardon
ich war bei einem Linus Script, hatte es übersehen das es php ist
Ich würde mal eine neue 2. File zum Schreiben öffnen
und es so testen.
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
Suchen, Ersetzen und Entfernen von Dateiinhalten auf Textbasis (1)

Frage von DanteManor zum Thema Batch & Shell ...

Batch & Shell
gelöst Powershell - In Textdatei suchen und ersetzen (5)

Frage von Raaja89 zum Thema Batch & Shell ...

Batch & Shell
gelöst Suchen und Ersetzen mehrerer Suchbegriffe per Batch (4)

Frage von makroll10 zum Thema Batch & Shell ...

Batch & Shell
gelöst Powershell String Suchen mit Wildcard und Ersetzen (6)

Frage von herrmanndominic zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (17)

Frage von liquidbase zum Thema Windows Update ...

Windows Tools
gelöst Aussendienst Datensynchronisierung (12)

Frage von lighningcrow zum Thema Windows Tools ...

Windows Server
RODC über VPN - Verbindung weg (10)

Frage von stefan2k1 zum Thema Windows Server ...