String (mit Sonderzeichen) ersetzen mit tr

Du suchst ein Programm für einen bestimmten Zweck?
Antworten
neuling
Beiträge: 159
Registriert: 21.07.2007 22:27:56

String (mit Sonderzeichen) ersetzen mit tr

Beitrag von neuling » 18.07.2009 16:21:03

Hallo,
ich möchte bestimmte HTML Tags in einer Datei durch andere ersetzen.

Das geht aber leider voll daneben. der Inhalt der Datei ist zum test nur <div>

Code: Alles auswählen

$  tr '<div>' '<div id="titel">' <test
<div
Ich habe die Größer- und Kleinerzeichen bewusst beim tr-Befehl angegeben, damit wirklich nur der Tag ersetzt wird und nicht Wortteile aus anderen Wörtern wie z. B. dividieren.

Wie lautet der Befehl richtig?

Danke

Benutzeravatar
GoKi
Beiträge: 2068
Registriert: 04.07.2003 23:08:56
Lizenz eigener Beiträge: MIT Lizenz

Re: String (mit Sonderzeichen) ersetzen mit tr

Beitrag von GoKi » 18.07.2009 16:42:50

Mit tr?
Benutz doch z.B. sed?

Code: Alles auswählen

sed 's/<div>/<div id="titel">/g' < test
MfG GoKi
:wq

Spasswolf
Beiträge: 3472
Registriert: 30.11.2005 10:32:22
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Wald

Re: String (mit Sonderzeichen) ersetzen mit tr

Beitrag von Spasswolf » 18.07.2009 16:44:19

Ich bin mir nicht sicher das tr das kann, mit sed geht es so:

Code: Alles auswählen

sed -i "s/<div>/\<div id="titel">/g" DATEI

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Re: String (mit Sonderzeichen) ersetzen mit tr

Beitrag von gms » 18.07.2009 17:03:10

tr ersetzt das n-te Zeichen aus dem ersten Argument in das n-te Zeichen des zweiten Arguments

Code: Alles auswählen

gms1 ~ # echo "abcdef" | tr ba yx
xycdef
es werden hier also alle 'a' zu 'x' und alle 'b' zu 'y' übersetzt. Daher hat auch "tr ba yx" den gleichen Effekt wie "tr ab xy"

Gruß
gms

neuling
Beiträge: 159
Registriert: 21.07.2007 22:27:56

String mit sed ersetzen und mit awk die Strings angeben

Beitrag von neuling » 18.07.2009 18:13:30

Vielen Dank für die Antworten.
Ich habe eine CSV-Datei mit 2 Spalten erstellt.

Die erste Spalte enthält den Suchstring. Diesen möchte ich mit awk -F ';' '{print $1}' replace.csv auslesen.
Die zweite Spalte erhält den Ersetzstring. Diesen möchte ich mit awk -F ';' '{print $2}' replace.csv auslesen.

Wie kann ich dies zusammen mit dem o.g. sed-Ersetzbefehl nutzen?

neuling
Beiträge: 159
Registriert: 21.07.2007 22:27:56

Re: String (mit Sonderzeichen) ersetzen mit tr

Beitrag von neuling » 19.07.2009 15:44:12

vielleicht habe ich mich im letzten Post nicht ganz vollständig ausgedrückt.
Die CSV-Datei enthält eine Liste von Such- und Ersetzstrigs, also so:

Code: Alles auswählen

suchstring1;ersatz1
suchstring2;ersatz2
...
Hier mein Lösungsansatz:

Code: Alles auswählen

SUCHEN=`awk -F ';' '{print $1}' replace.csv`
ERSETZEN=`awk -F ';' '{print $2}' replace.csv`

sed 's/$SUCHEN/$ERSETZEN/g' < test
Ich weiß, dass es so nicht funktionieren kann. Aber vielleicht bin ich ja schon auf dem richtigen Weg. Vielleicht könnte man ja auch irgendwie den Befehl xargs verwenden, um das Problem zu lösen.

Benutzeravatar
ThorstenS
Beiträge: 2875
Registriert: 24.04.2004 15:33:31

Re: String (mit Sonderzeichen) ersetzen mit tr

Beitrag von ThorstenS » 23.07.2009 00:39:22

Ich würde die CSV-Datei fix im vim öffnen und aus der Ersetzungsliste Befehle machen.

im vim also folgendes tippseln:

Code: Alles auswählen

:% s#^#sed 's/#
:% s#;#/#
:% s#$#/g' < test#
:wq
Dann ein sh replace.csv und warten.
Das ist unkonventionell aber in deiner Situation und deinem Kenntnisstand die schnellste Lösung.

Antworten