Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Wie mit sed/awk zeichenkette ersetzen?

948 views
Skip to first unread message

Sebastian Hofbauer

unread,
Jan 5, 2005, 9:31:25 AM1/5/05
to
Hallo NG!

Ich muss ein file in der vorm:

[...]
0.234234E+001 1.234456E+002
1.457645E+002 2.234234E+001
[...]

ersetzen duch:
[...]
0,234234E+002 1,234456E+003
1,457645E+003 2,234234E+002
[...]

Also eine 10er Potenz nach oben, und Punkt durch Komma ersetzen.

Nun hab ich dank google und co schon herausgefunden, dass dies sehr schön mit
"sed s/+001/+002/g" usw. geht!. Leider funtioniert das ersetzten der Zeichen nur mit
"+001 durch +002"usw., aber nicht mit punkt durch Komma!

Der Befehl : sed s/./,/g liefert in etwa:
,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,

Wer Kann mir sagen wie ich auch Punkt durch Komma erstezen kann.
Entweder mit "sed" oder auch mit "awk"? ..oder gibts noch was schöneres? :-)

Vielen dank für Tip und Ratschläge

Grüsse Sepp

Hans Müller

unread,
Jan 5, 2005, 9:48:41 AM1/5/05
to
Versuch mal sed s/\./,/g
. mein beliebiges Zeichen - macht sed dann auch so!
Aus einer Shell brauch man \\ um dem sed einen \ übrig zu lassen!

echo "test "bla . x y , ." | sed s/\\./,/g

macht dann wie es soll.

Gruß
Hans

Sebastian Hofbauer

unread,
Jan 5, 2005, 10:34:36 AM1/5/05
to
On Wed, 05 Jan 2005 15:48:41 +0100
Hans Müller <Hein...@web.de> schrieb:

> Versuch mal sed s/\./,/g

..ging nicht, aber

sed s/\\./,/g file >new_file

War genau das was ich gesucht hab!
Vielen dank!

Ciao Sepp

Message has been deleted

Christian Schrader

unread,
Jan 8, 2005, 11:39:03 AM1/8/05
to
Sebastian Hofbauer <sebastian...@web.de> wrote:
> Ich muss ein file in der vorm:
>
> [...]
> 0.234234E+001 1.234456E+002
> 1.457645E+002 2.234234E+001
> [...]
>
> ersetzen duch:
> [...]
> 0,234234E+002 1,234456E+003
> 1,457645E+003 2,234234E+002
> [...]
>
> Also eine 10er Potenz nach oben, und Punkt durch Komma ersetzen.
>
> Nun hab ich dank google und co schon herausgefunden, dass dies sehr schön mit
> "sed s/+001/+002/g" usw. geht!.

Ui, das ist aber gefährlich, da Du beim mehrfachen Durchlauf die schon
ersetzten Zeichen nochmal ersetzt. Ich würde da lieber mit awk
schnippeln und rechnen:

#!/usr/bin/awk -f
{
a=substr($1, 11, 3);
b=substr($2, 11, 3);
sub("\\.", ",", $1)
sub("\\.", ",", $2)
printf("%s%03i\t%s%03i\n", substr($1,0,10), ++a, substr($2,0,10), ++b);
}

o.s.ä.


Gruß,
Christian

Gerhard Schromm

unread,
Jan 7, 2005, 6:59:59 PM1/7/05
to
On Wed, 5 Jan 2005, Sebastian Hofbauer wrote:
> On Wed, 05 Jan 2005 15:48:41 +0100
> Hans Müller <Hein...@web.de> schrieb:
>> Versuch mal sed s/\./,/g
> ..ging nicht, aber
> sed s/\\./,/g file >new_file
>
> War genau das was ich gesucht hab!

Um späteren Fragen in Sachen sed vorzubeugen, empfehle ich die Manpage
regex(7). Die hilft auch bei grep awk und sogar vi(m).

bye Gerhard

Bernd Nawothnig

unread,
Jan 8, 2005, 1:29:18 PM1/8/05
to
On 2005-01-07, Gerhard Schromm wrote:

> Um späteren Fragen in Sachen sed vorzubeugen, empfehle ich die Manpage
> regex(7). Die hilft auch bei grep awk und sogar vi(m).

Sooo furchtbar viel steht da allerdings nicht drin. Die sed Infoseite
wäre auch noch empfehlenswert. Und allfällige Tutorials ==> Google


Bernd

--
Those who desire to give up freedom in order to gain security,
will not have, nor do they deserve, either one. [T. Jefferson]

Juergen Ilse

unread,
Jan 19, 2005, 7:59:43 AM1/19/05
to
Hallo,

Sebastian Hofbauer <sebastian...@web.de> wrote:
>
> Nun hab ich dank google und co schon herausgefunden, dass dies sehr schön mit
> "sed s/+001/+002/g" usw. geht!. Leider funtioniert das ersetzten der Zeichen nur mit
> "+001 durch +002"usw., aber nicht mit punkt durch Komma!
>
> Der Befehl : sed s/./,/g liefert in etwa:
> ,,,,,,,,,,,,,,,,,
> ,,,,,,,,,,,,,,,,,
> ,,,,,,,,,,,,,,,,,

Du moechtest dich mit "regular expressions" vertraut machen und
naechstes mal in einer Gruppe fragen, wo deine Frage OnTopic ist
(in diesem Fall wohl de.comp.os.unix.shell) ...

Um die Sonderbedeutung des "." in regular expressions loszuwerden,
muss man ihn durch einen vorangestellten "\" quoten, also "\." ...

Tschuess,
Juergen Ilse (jue...@usenet-verwaltung.de)

Juergen Ilse

unread,
Jan 19, 2005, 8:02:43 AM1/19/05
to
Hallo,

Sebastian Hofbauer <sebastian...@web.de> wrote:
>
> Nun hab ich dank google und co schon herausgefunden, dass dies sehr schön mit
> "sed s/+001/+002/g" usw. geht!. Leider funtioniert das ersetzten der Zeichen n
ur mit
> "+001 durch +002"usw., aber nicht mit punkt durch Komma!
>
> Der Befehl : sed s/./,/g liefert in etwa:
> ,,,,,,,,,,,,,,,,,
> ,,,,,,,,,,,,,,,,,
> ,,,,,,,,,,,,,,,,,

Du moechtest dich mit "regular expressions" und der "command line expansion"
deiner shell vertraut machen und naechstes mal in einer Gruppe fragen, wo

deine Frage OnTopic ist (in diesem Fall wohl de.comp.os.unix.shell) ...

^L


Um die Sonderbedeutung des "." in regular expressions loszuwerden,
muss man ihn durch einen vorangestellten "\" quoten, also "\." ...

Da aber die shell ein vorangestelltest "\" bereits als Sonderzeichen
(quoten des nachfolgenden Zeichens) erkennt, muss man fuer die shell
dann den "\" nochmals quoten (z.B. durch einschliessen in Anfuehrungs-
zeichen oder voranstellen eines weiteren "\").

Tschuess,
Juergen Ilse (jue...@usenet-verwaltung.de)

0 new messages