{
echo "header"
cat $file
echo "footer"
} > tmpfile
mv tmpfile $file
Qual é o código mais curto que faz isso? Eu tenho feito algo parecido com
echo "header" > tmpfile
cat $file >> tmpfile
echo "footer" >> tmpfile
mv tmpfile $file
Existe uma maneira mais compacta?
sed -i -e '1s/^/header\n/' -e '$s/$/\nfooter/' $file
Atualizar : ainda mais curto:
sed -i '1s/^/header\n/;$s/$/\nfooter/' $file
Atualizar : e ainda mais curto (mas deve estar em várias linhas, pois os comandos 'i'
e 'a'
em 'sed'
devem ser seguidos por \<newline>
):
sed -i '1i\
header
;$a\
footer' $file
Bem, você poderia usar um documento aqui
tee > /tmp/otherfile <<EOF
header
$(cat $file)
footer
EOF
Em seguida, renomeie.
Isso parece funcionar em zsh
, mas infelizmente não em bash
.
TMPTXT="header\n"$(cat $file)"\nfooter"
echo $TMPTXT > $file
ou em uma linha:
echo header\n"$(cat $file)"\nfooter > $file
(Eu acho que isso deve funcionar em bash
também, exceto que eu tenho alguns problemas para acertar as novas linhas.)
EDITAR:
Usando echo -e isso também funciona em bash
em uma linha:
echo -e "header\n$(cat $file)\nfooter"