Tente:
sed 's/^/hello there is /' file1.txt > final.sh
Ou se você tiver que usar uma variável:
printf '%s\n' "$var" | sed 's/^/hello there is /' > final.sh
Se você não se importa em perder linhas vazias, também pode fazer:
IFS='
' # split on newline
set -o noglob # disable glob
printf 'hello there is %s\n' $var > final.sh # invoke split+glob
Para o seu problema real:
sed "s/.*/UPDATE ownership SET library_id = 'u-wl' where doc_id = '&';/" < file1.txt |
sqlite "$PLAY_DB_DIR/library.db"
(observe que as entradas nos arquivos não contêm '
ou outras seqüências especiais de bytes na linguagem sqlite. Se você não conseguir essa garantia, isso seria uma vulnerabilidade de injeção de sqlite na melhor das hipóteses).
Ou se você precisar gerar código shell para ser executado posteriormente:
{
echo 'sqlite "$PLAY_DB_DIR/library.db" << "EOF"'
sed "s/.*/UPDATE ownership SET library_id = 'u-wl' where doc_id = '&';/" < file1.txt
echo EOF
} > final.sh
Que na sua amostra dá:
sqlite "$PLAY_DB_DIR/library.db" << "EOF"
UPDATE ownership SET library_id = 'u-wl' where doc_id = 'bibi.toto';
UPDATE ownership SET library_id = 'u-wl' where doc_id = 'jaja.bubu';
UPDATE ownership SET library_id = 'u-wl' where doc_id = 'vrtegbvtr.rvgtbtdtbvtd';
EOF
Ou se você tiver para executar um comando sqlite
por consulta:
repl=$(cat << "EOF"
sqlite "$PLAY_DB_DIR/library.db" 'UPDATE ownership SET library_id = '\''u-wl'\'' where doc_id = '\''&'\'';'
EOF
)
sed "s@.*@$repl@" < file1.txt > final.sh
(desta vez, além de uma vulnerabilidade de injeção de sqlite, que se torna uma vulnerabilidade de execução de comando arbitrária, se o arquivo puder conter caracteres de aspas simples).
Na sua amostra, isso dá:
sqlite "$PLAY_DB_DIR/library.db" 'UPDATE ownership SET library_id = '\''u-wl'\'' where doc_id = '\''bibi.toto'\'';'
sqlite "$PLAY_DB_DIR/library.db" 'UPDATE ownership SET library_id = '\''u-wl'\'' where doc_id = '\''jaja.bubu'\'';'
sqlite "$PLAY_DB_DIR/library.db" 'UPDATE ownership SET library_id = '\''u-wl'\'' where doc_id = '\''vrtegbvtr.rvgtbtdtbvtd'\'';'