mit sed aus Array lesen..

T

tanita

Grünschnabel
Hallo,

bin neu hier, erstmal Servus! :)

Folgendes, ich möchte in einem Shell-Skript die Variable 'pattern auslesen und verändern.. :hilfe2:


In einer Datei file.txt hab ich folgendes definiert:
Code:
1,$s/ö/oe/g
1,$s/Ö/oe/g
1,$s/ä/ae/g
1,$s/Ä/ae/g
1,$s/ü/ue/g
1,$s/Ü/ue/g
1,$s/ß/ss/g

und rufe es so auf:
Code:
pattern=`echo $zeile |awk -F\; '{printf("%s.%s", $4, $3)}' |sed -f filter.txt`

oder so:

Code:
pattern=`echo $zeile |awk -F; '{printf("%s.%s", $4, $3)}' |sed 's/ö/oe/g'`

funkt :]


Jetzt wollte ich es innerhalb des Skriptes mitels Variable oder Array erledigen, z.B. so:

Code:
FILTER="s/ö/oe/g s/Ö/oe/g s/ä/ae/g s/Ä/ae/g s/ü/ue/g s/Ü/ue/g s/ß/ss/g"

pattern=`echo $zeile |awk -F; '{printf("%s.%s", $4, $3)}' | for X in $FILTER; do sed $X; done;`

so

Code:
pattern=`echo $zeile |awk -F\; '{printf("%s.%s", $4, $3)}' | sed -e 's/ö/oe/g' |sed -e 's/Ö/oe/g' -e ' s/ä/ae/g' -e 's/Ä/ae/g' -e 's/ü/ue/g' -e 's/Ü/ue/g' -e 's/ß/ss/g'`

oder so:
Code:
pattern=`echo $zeile |awk -F\; '{printf("%s.%s", $4, $3)}' | sed -e 's/ö/oe/g' |sed -e 's/Ö/oe/g'|sed -e ' s/ä/ae/g'|sed -e 's/Ä/ae/g'|sed -e 's/ü/ue/g'|sed -e 's/Ü/ue/g'|sed -e 's/ß/ss/g'`

geht auch nicht..

any help?

THX,
Gruß T.


edith: sorry, geht hatte noch eine falsche Zeile auskommentiert.. :erschlag:
Code:
pattern=`echo $zeile |awk -F\; '{printf("%s.%s", $4, $3)}' | for X in $FILTER; do sed -e $X; done;`
der output war als letztes..

Trotzdem, ginge sowas z.B. aus einem Array zu lesen?
 
Zuletzt bearbeitet:
Hallo
Wenn du das als Array definierst und behandelst:
Code:
$ bash -version
GNU bash, version 3.1.17(1)-release (i486-pc-linux-gnu)
Copyright (C) 2005 Free Software Foundation, Inc.

$ X=(s/A/a/g s/B/b/g s/C/c/g);for e in ${X[*]}; do echo ABCD|sed -e $e;done
aBCD
AbCD
ABcD

Gruß Wolfgang
 
Hallo Wolfgang,

so konnte ich das Array auch auslesen. Ich wollte es jedoch an dieser Stelle auslesen:
Code:
pattern=`echo $zeile |awk -F; '{printf("%s.%s", $4, $3)}' | for X in $FILTER; do sed $X; done;`

Habe mittlerweile gelernt, dass das nicht geht, weil sed die Kommandos in mehreren Zeilen braucht.. wie auch immer das zu verstehen ist, nach dem pipe wird jedenfalls nur die erste Expression verarbeitet.

D.h. so wie oben in den letzten beiden Beispielen beschrieben.. oder so:
Code:
echo $zeile |awk -F\; '{printf("%s.%s", $4, $3)}' | \
        sed -e 's/ö/oe/g'
                  's/Ö/oe/g'
                         .
                         .
                         .
                  's/ß/ss/g'

Aber danke,
Servus T.
 
Zuletzt bearbeitet:
Hallo
Na dann nutze es als String.
Etwa so:
Code:
$ X="s/A/a/g;s/B/b/g;s/C/c/g";echo ABCD|sed -e $X
abcD

Hoffe mal du nutzt GNU sed, da du weder OS noch deine Bash erwähnt hast.

Gruß Wolfgang
 

Ähnliche Themen

Switche abfragen über Script

Verschlüsseltes Backup-Script mit rsync

sed? Zeichenkette ersetzen 1:2:17 zu 1:02:17

Variable mit 'tr' ändern

ip6tables Problem

Zurück
Oben