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