sipsip
Goto Top

Bash: suchen und ersetzen

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
#!/bin/bash

string=^M\
newstring=a

echo "sed 's|$string|$newstring|'"  
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?

Content-ID: 228903

Url: https://administrator.de/contentid/228903

Ausgedruckt am: 26.11.2024 um 08:11 Uhr

hajowe
hajowe 06.02.2014 um 09:49:58 Uhr
Goto Top
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
Lochkartenstanzer
Lochkartenstanzer 06.02.2014 aktualisiert um 11:01:30 Uhr
Goto Top
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
SIPSIP
SIPSIP 06.02.2014 um 10:53:16 Uhr
Goto Top
Mein Script sieht nun folgendermassen aus:
#!/bin/bash

echo "replacing string '^M\' with the lettre 'a'"  

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:
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\  
Lochkartenstanzer
Lochkartenstanzer 06.02.2014 um 11:00:19 Uhr
Goto Top
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
SIPSIP
SIPSIP 06.02.2014 um 11:13:13 Uhr
Goto Top
stimmt... jedoch sobald ich es als Scritp versuche, klappt es nichtmehr...

#!/bin/bash

echo "replacing string '^M\' with the lettre 'a'"  

sed -e "s:\^M\\\:a:g" > result.csv  
Lochkartenstanzer
Lochkartenstanzer 06.02.2014 um 11:26:16 Uhr
Goto Top
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

SIPSIP
SIPSIP 06.02.2014 um 11:36:03 Uhr
Goto Top
komisch...
sobald ich den Grund dafür gefunden habe melde ich mich nochmal.
Danke für deine Hilfe
Lochkartenstanzer
Lochkartenstanzer 06.02.2014 um 11:43:11 Uhr
Goto Top
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
SIPSIP
SIPSIP 06.02.2014 um 11:50:18 Uhr
Goto Top
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
hajowe
hajowe 06.02.2014 aktualisiert um 13:56:56 Uhr
Goto Top
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.
SIPSIP
SIPSIP 07.02.2014 aktualisiert um 09:46:58 Uhr
Goto Top
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 face-smile

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.

#!/usr/bin/php
<?php

$datei = "php-result.csv";  
$fp = fopen($datei, "w+");  

if ($argc <= 1) {
	echo "Expected a file at argument 1, but it doesn't exist.\n";  
	exit;
}

$file = $argv[1];
if (!file_exists($file)) {
	echo "No such file. " . $file . "\n";  
}
$content = file_get_contents($file);
$data = array();
if (preg_match_all("/<\s*td\s+valign\s*=\s*\"\"top\"\"\s*>(.*)\s*\<\s*\/td\s*\>/iUs", $content, $matches)) {  
	foreach ($matches[1] AS $entry) {
		$entry = trim($entry);
		if (preg_match("/\<p class\=\"\"Untertitel\"\"\>(.+)\<\/p\>.*\<p class\=\"\"Haupttext\"\"\>([^<]+@[^<]+)\<\/p\>/iUs", $entry, $entry_match)) {  
			$data = array(
				'name' => strip_tags($entry_match[1]),  
				'email' => strip_tags($entry_match[2]),  
			);
		}
	}
}
echo "NAME;EMAIL\n";  
foreach ($data as $person_data) {
	echo '"' . $person_data['name'] . '";"' . $person_data['email'] . "\"\n";  
}

fwrite($fp,"\n");  
fclose($fp);
?> 
Die nötige Syntax ist die am Anfang und Ende aber ich bekomm nur ein leeres csv zurück...
hajowe
hajowe 07.02.2014 um 10:30:19 Uhr
Goto Top
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ß
SIPSIP
SIPSIP 07.02.2014 um 10:43:26 Uhr
Goto Top
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 ...
hajowe
hajowe 07.02.2014 aktualisiert um 11:21:09 Uhr
Goto Top
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.