Mir wurde gesagt, es sei möglich, aber ohne ein einziges funktionierendes Beispiel, das sed
aus einer Zeichenfolgenvariablen lesen kann, ohne eine Eingabedatei zu benötigen. Ich muss es noch zum Laufen bringen. Zur allgemeinen Sicherheit schreibe ich die $PATH
Variable in eine andere Variable, während ich damit herumspiele, da ich erst dann andere Probleme habe, wenn ich genau weiß, wie das geht.
Folgendes berücksichtigen:
~$x=$PATH
~$sed -i 's/:/ /g' $x
Dies schlägt fehl mit: Keine solche Datei oder Verzeichnis.
Hier sind einige andere, die ich ausprobiert habe:
~$ sed -i 's/:/ /g' | (read x)
sed: no input files
~$ sed -i 's/:/ /g' | (read $x)
bash: read: `/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games': not a valid identifier
sed: no input files
~$ sed -i 's/:/ /g' | $(read x)
sed: no input files
~$ sed -i 's/:/ /g' | $(read $x)
bash: read: `/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games': not a valid identifier
sed: no input files
~$ sed -i 's/:/ /g' < $(read $x)
bash: read: `/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games': not a valid identifier
bash: $(read $x): ambiguous redirect
~$ sed -i 's/:/ /g' < read $x
bash: read: No such file or directory
~$ sed -i 's/:/ /g' < (read x)
bash: syntax error near unexpected token `('
~$ sed -i 's/:/ /g' < $((read x))
bash: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games: syntax error: operand expected (error token is "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games")
~$ sed -i 's/:/ /g' < $((read $x))
bash: read /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games: division by 0 (error token is "usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games")
~$ sed -i 's/:/ /g' << $((read $x))
> ;^C
~$ sed -i 's/:/ /g' << $(read $x)
> ;^C
~$ sed -i 's/:/ /g' $x
sed: can't read /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games: No such file or directory
~$ sed -i 's/:/ /g' < $x
bash: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games: No such file or directory
~$ sed -i 's/:/ /g' < echo $x
bash: echo: No such file or directory
~$ sed -i 's/:/ /g' | echo $x
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
sed: no input files
Kann das überhaupt funktionieren? Ich würde es vorziehen, keine Dateien schreiben zu müssen, die ich nicht brauche, nur damit ich sed verwenden kann. Wenn in diesem Beispiel ~$x=$PATH ~$sed -i 's/:/ /g' $x
tatsächlich so gearbeitet hätte, wie ich es mir erhofft hätte, hätte ich Folgendes erhalten:
/usr/local/sbin /usr/local/bin /usr/sbin /usr/bin /sbin /bin /usr/games /usr/local/games
die ich dann einer variablen zuweisen und in zukünftigen befehlen verwenden könnte, wie ls $x
x=$(echo "$x" | sed 's/:/ /g')
?