Innerhalb einer sed Ersetzung eine bash aufrufen

C

chris_sy

Hallo,

ein

Code:
echo ttt | sed 's/[t]\{3\}/\0 param2 param3/g'

liefert ttt param2 param3

ein

Code:
echo ttt | sed "s/[t]\{3\}/$(./bashscript.sh param2 param3)/g"

liefert die Ausgabe von
Code:
./bashscript.sh param2 param3

ein

Code:
echo ttt | sed "s/[t]\{3\}/$(./bashscript.sh \0 param2 param3)/g"

geht leider nicht. Es wird nicht
Code:
./bashscript.sh ttt param2 param3
aufgerufen, sondern
Code:
./bashscript.sh \0 param2 param3

Weis jemand, wie man das hin bekommen könnte? :hilfe2:

Soweit erst einmal
 
Zuletzt bearbeitet von einem Moderator:
Hi,

erstens verstehe ich nicht wieso du die Ausgabe nicht einfach vorher in einer Variable speicherst
Code:
foo=$(./bashscript.sh param2 param3)
und zweitens funktioniert auch dein erster Ansatz hier wunderbar. Aber wie immer, kein OS angegeben...

mfg,
bytepool
 
...geht leider nicht.
Doch es geht, du weißt nur nicht in welcher Reihenfolge die entsprechenden Ersetzungen durchgeführt werden. Natürlich wird der Output der Subshell erzeugt *bevor* sed auch nur aufgerufen wird.
Code:
$ man bash| less -p '^EXPANSION'
The order of expansions is: brace expansion, tilde expansion, parame‐
ter, variable and arithmetic expansion and command substitution (done
in a left-to-right fashion), word splitting, and pathname expansion.
Und erst *nach* all diesen Expansionen werden sed die Argumente übergeben.

Lösung: das ganze in mehr als einem Kommando machen.
 
Doch es geht, du weißt nur nicht in welcher Reihenfolge die entsprechenden Ersetzungen durchgeführt werden. Natürlich wird der Output der Subshell erzeugt *bevor* sed auch nur aufgerufen wird.
Oh Mann, ich sollte mal zum Augenarzt gehen, ich hab mal wieder nicht richtig gelesen und sein Problem gar nicht verstanden. ;)
Dachte es geht drum dass die Subshell nicht evaluiert wird...

mfg,
bytepool
 

Ähnliche Themen

sed - Bitte um Unterstützung

SELinux und IPTV

Telefoninterview (Wie sich auf Bash-Shell-Fragen vorbereiten?)

[Gelöst] Suchen und ersetzen mit Hilfe mehrerer Parameter

Wertebereich ersetzen mit sed

Zurück
Oben