Sie können dies immer tun (da Sie GNU sedbereits verwenden ( -i)):
sed -i -f - FILE_NAME << EOF
s/BASE_64/$BASE_64/g
EOF
-f -sagt sed, dass das sed-Skript von stdin gelesen werden soll.
Wenn Sie das gleiche Skript für mehrere Dateien wieder zu verwenden, auf Linux (und nur Linux), mit einer Schale wie bash, zsh, kshdass die Geräte hier Dokumente mit temporären Dateien (im Gegensatz zu Rohren entgegengesetzt wie dashoder yash) und immer noch mit GNU sed, könnten Sie tun:
find . -name '*.conf' -exec sed -i -f /dev/stdin {} + << EOF
s/BASE_64/$BASE_64/g
EOF
Unter Linux (und nur unter Linux) /dev/stdinbedeutet dies nicht, dass stdin auf die gleiche Weise -funktioniert. Stattdessen ist es ein Symlink zu der auf stdin geöffneten Datei. Jedes Mal sed, wenn sie geöffnet wird, wird die Datei von Anfang an neu geöffnet. Der obige Befehl würde auf anderen Systemen (mit /dev/stdin) oder mit Shells, die hier Dokumente mit Pipes implementieren, einwandfrei funktionieren, jedoch nur, wenn nur wenige confDateien vorhanden sind, seddie nur einmal aufgerufen werden. Wenn das zweite Mal aufgerufen, auf Nicht-Linux - Systemen, wie mit -f -, /dev/stdinscheint leer , da es bereits durch den ersten Aufruf gelesen wurde.
busybox sedunterstützt -iauf die gleiche Weise wie GNU sed, unterstützt jedoch nicht -f -. Sie möchten -f /dev/stdines also auf jeden Fall dort verwenden. sedVerwenden Sie mit FreeBSD :
sed -i '' -f /dev/stdin FILE_NAME << EOF
s/BASE_64/$BASE_64/g
EOF
BASE64nur ein Teil der Leitung ist und Sie nicht die gesamte Leitung ersetzen möchten?