Você sempre pode fazer (já que você está usando o GNU sed
já ( -i
)):
sed -i -f - FILE_NAME << EOF
s/BASE_64/$BASE_64/g
EOF
-f -
diz sed
para ler o script sed do stdin.
Se você quiser reutilizar o mesmo script para vários arquivos, no Linux (e somente no Linux), com um shell como bash
, zsh
, ksh
que implementa aqui documentos com arquivos temporários (em oposição a pipes como dash
ou yash
) e ainda com o GNU sed
, você poderia fazer:
find . -name '*.conf' -exec sed -i -f /dev/stdin {} + << EOF
s/BASE_64/$BASE_64/g
EOF
No Linux (e no Linux apenas), /dev/stdin
não significa stdin da mesma maneira que -
. Em vez disso, é um link simbólico para o arquivo aberto no stdin, então cada vez que sed
abrir, ele abrirá o arquivo novamente desde o início. O comando acima funcionaria bem em outros sistemas (que possuem /dev/stdin
) ou com shells que implementam here-documents com pipes, mas somente se houver poucos arquivos conf
suficientes para que sed
seja chamado apenas uma vez. Quando chamado pela segunda vez, em sistemas não Linux, como com -f -
, /dev/stdin
apareceria vazio porque já foi lido pela primeira chamada.
busybox
sed
também suporta -i
da mesma forma que o GNU sed
, mas não suporta -f -
. Então você quer usar -f /dev/stdin
em qualquer caso. Com FreeBSD sed
, use:
sed -i '' -f /dev/stdin FILE_NAME << EOF
s/BASE_64/$BASE_64/g
EOF