Sobrescreve um arquivo com uma versão editada no bash

1

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?

    
por Mark 20.07.2011 / 23:26

4 respostas

2
{
echo "header"
cat $file
echo "footer"
} > tmpfile
mv tmpfile $file
    
por 20.07.2011 / 23:42
3
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
    
por 21.07.2011 / 11:13
2

Bem, você poderia usar um documento aqui

tee > /tmp/otherfile <<EOF
header
$(cat $file)
footer
EOF

Em seguida, renomeie.

    
por 20.07.2011 / 23:37
0

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"
    
por 21.07.2011 / 00:27

Tags