[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Arithmetische Ausdruecke in sed



Hallo,

ich moechte mich heute auch einmal mit einem Problemchen an die vielen sed-Experten auf der Liste wenden. :-)

Ich habe eine Datei, in der Datensaetze untereinander numeriert sind, also so:

----------------------------
1
Text
Text

2
noch mehr Text

3
ganz anderer Text
ganz anderer Text
ganz anderer Text
----------------------------

Jetzt will ich am Anfang einige Datensaetze einfuegen und die Numerierung aendern; es laeuft also auf die ganz simple Addition einer Konstanten heraus. Eine Variante, die funktionieren wuerde, habe ich schon:

----------------------------
pc@rocket:~$ for i in `seq 290`
do sed -e 's/^'$i'[[:space:]]/'$(($i+18))'/' FILE >tmp
mv tmp FILE
done
----------------------------

Allerdings ist das natuerlich aeusserst unelegant, da fuer jedes $i eine Instanz von sed gestartet und zwei Dateien geschrieben werden muessen. Sehr viel schoener waere es, die Werte fuer $i direkt aus dem Stream zu holen und alles in einem Durchlauf zu ersetzen. Allerdings bekomme ich dass nicht hin. Mit

----------------------------
sed -e 's/^\([0-9][0-9]*\)[[:space:]]/\1+18/'
----------------------------

und aehnlichen Konstrukten veraendere ich ja nur Strings, und bei

----------------------------
sed -e 's/^\([0-9][0-9]*\)[[:space:]]/'$(('\1' + 18))'/'
----------------------------

beschwert sich die bash ueber einen Syntax-Error. (operand expected (error token is "'\1' + 18")

Gibt es eine Moeglichkeit, direkt in sed numerische Ausdruecke zu verarbeiten? Oder wie kann ich anderenfalls diese Ausdruecke an die bash weitergeben?

Schoenen Gruss,

Andreas

Attachment: pgpRD4ICVbgIO.pgp
Description: PGP signature


Reply to: