Hallo allerseits, ich möchte in einer Datei eine Zeile ersetzen, die eine bestimmte Zeichenkette enthält. Man könnte es innerhalb eines Skripts so machen: sed -n 's/.*aaa.*/bbb/;w out.txt' in.txt In meinem Fall soll "bbb" jedoch variabel sein, also: ccc="bbb" sed -n 's/.*aaa.*/$ccc/;w out.txt' in.txt ^^^^ D.h. $ccc soll innerhalb von sed expandiert werden. Geht das überhaupt? Und wenn ja, wie sieht das dann aus? Thomas
Am Donnerstag, 7. März 2002 11:10 schrieb Thomas Pich:
Hallo allerseits,
ich möchte in einer Datei eine Zeile ersetzen, die eine bestimmte Zeichenkette enthält. Man könnte es innerhalb eines Skripts so machen:
sed -n 's/.*aaa.*/bbb/;w out.txt' in.txt
In meinem Fall soll "bbb" jedoch variabel sein, also:
ccc="bbb" sed -n 's/.*aaa.*/$ccc/;w out.txt' in.txt ^^^^ D.h. $ccc soll innerhalb von sed expandiert werden. Geht das überhaupt? Und wenn ja, wie sieht das dann aus?
Thoma
sed -n "s/.*aaa.*/$ccc/;w out.txt" in.txt nimm " anstatt des ' - ich hab die tage genau das gleiche Problem gehabt Alfred
Hallo Thomas, * Am 07.03.2002 um 11:10 Uhr schrieb Thomas Pich:
ich möchte in einer Datei eine Zeile ersetzen, die eine bestimmte Zeichenkette enthält. Man könnte es innerhalb eines Skripts so machen:
sed -n 's/.*aaa.*/bbb/;w out.txt' in.txt
In meinem Fall soll "bbb" jedoch variabel sein, also:
ccc="bbb" sed -n 's/.*aaa.*/$ccc/;w out.txt' in.txt ^^^^ D.h. $ccc soll innerhalb von sed expandiert werden. Geht das überhaupt? Und wenn ja, wie sieht das dann aus?
wie wärs hiermit? ---[ schnipp ]--- #!/bin/bash MUSTER='aaa' ERSATZ='bbb' IN='in.txt' OUT='out.txt' sed "s/$MUSTER/$ERSATZ/g" <$IN >$OUT ---[ schnapp ]--- Jürgen -- Fehler sind menschlich - aber wer richtigen Mist bauen will, der braucht einen Computer! / Registered Linux-User #130804 http://counter.li.org \ \ Linux Stammtisch Bremerhaven http://linux.hs-bremerhaven.de /
Hi Juergen, On Thu, Mar 07, 2002 at 11:28:01AM +0100, Juergen Schwarting wrote:
wie wärs hiermit?
---[ schnipp ]---
#!/bin/bash
MUSTER='aaa' ERSATZ='bbb' IN='in.txt' OUT='out.txt'
sed "s/$MUSTER/$ERSATZ/g" <$IN >$OUT
---[ schnapp ]---
man sollte ihm vielleicht noch sagen was mit '/' und solchen dingen passiert wenn sie in $MUSTER oder $ERSATZ auftauchen. Es geht nicht alles auf diese Art ohne Sonderbehandlung. -- MfG. Falk
On Thu, Mar 07, 2002 at 11:10:42AM +0100, Thomas Pich wrote:
In meinem Fall soll "bbb" jedoch variabel sein, also:
ccc="bbb" sed -n 's/.*aaa.*/$ccc/;w out.txt' in.txt ^^^^ D.h. $ccc soll innerhalb von sed expandiert werden. Geht das überhaupt? Und wenn ja, wie sieht das dann aus?
" anstelle von ' ? Peter
* Thomas Pich schrieb am 07.Mär.2002:
ich möchte in einer Datei eine Zeile ersetzen, die eine bestimmte Zeichenkette enthält. Man könnte es innerhalb eines Skripts so machen:
sed -n 's/.*aaa.*/bbb/;w out.txt' in.txt
In meinem Fall soll "bbb" jedoch variabel sein, also:
ccc="bbb" sed -n 's/.*aaa.*/$ccc/;w out.txt' in.txt ^^^^ D.h. $ccc soll innerhalb von sed expandiert werden. Geht das überhaupt? Und wenn ja, wie sieht das dann aus?
Du darfst nicht mit '...' klammern. Diese Klammer ist ja nur für die shell, damit sie alles so nimmt wie es da steht und nichts interpretiert. Entweder nimst Du stattdessen "...", dann werden Variable doch ersetzt, oder aber Du mußt vor jeder Variablen die '-Umgebung aufheben. Bernd -- Alle meine Signaturen sind rein zufällig und haben nichts mit dem Text oder dem Schreiber zu tun, dem ich antworte. Falls irgendwelche Unrichtigkeiten dabei sein sollten, so bedauere ich das. Es wäre nett, wenn Du mich benachrichtigen würdest. |Zufallssignatur 0
Hallo, hier noch eine Anmerkung, der Vollständigkeit halber.
sed "s#$MUSTER#$ERSATZ#g" <$IN >$OUT
...müsste funktionieren, oder?
Es geht sogar:
$ A=`echo -ne "\x4"`
$ echo -ne $A | od -x
0000000 0001
0000001
$ sed "s$A""$MUSTER$A""$ERSATZ$A""g" $IN | less
Die Wahrscheinlichkeit, daß ein Steuerzeichen wie EOF (^D)
in einem Dateinamen oder -pfad vorkommt, dürfte nahe null
sein.
Gruß
Bertram
--
Bertram Scharpf
participants (7)
-
Alfred Reinhard
-
B.Brodesser@t-online.de
-
Bertram Scharpf
-
Falk Sauer
-
Juergen Schwarting
-
Peter Wiersig
-
Thomas Pich