Sie können dies immer tun (da Sie GNU sed
bereits 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
, ksh
dass die Geräte hier Dokumente mit temporären Dateien (im Gegensatz zu Rohren entgegengesetzt wie dash
oder 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/stdin
bedeutet 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 conf
Dateien vorhanden sind, sed
die nur einmal aufgerufen werden. Wenn das zweite Mal aufgerufen, auf Nicht-Linux - Systemen, wie mit -f -
, /dev/stdin
scheint leer , da es bereits durch den ersten Aufruf gelesen wurde.
busybox
sed
unterstützt -i
auf die gleiche Weise wie GNU sed
, unterstützt jedoch nicht -f -
. Sie möchten -f /dev/stdin
es also auf jeden Fall dort verwenden. sed
Verwenden Sie mit FreeBSD :
sed -i '' -f /dev/stdin FILE_NAME << EOF
s/BASE_64/$BASE_64/g
EOF
BASE64
nur ein Teil der Leitung ist und Sie nicht die gesamte Leitung ersetzen möchten?