Какой самый короткий код, который делает это? Я делал что-то вроде
echo "header" > tmpfile
cat $file >> tmpfile
echo "footer" >> tmpfile
mv tmpfile $file
, Есть ли более компактный способ?
sed -i -e '1s/^/header\n/' -e '$s/$/\nfooter/' $file
Обновление: еще короче:
sed -i '1s/^/header\n/;$s/$/\nfooter/' $file
Обновление: и даже короче (но должно быть во многих строках, поскольку команды 'i' и 'a' в 'sed' должны сопровождаться \<newline>):
sed -i '1i\
header
;$a\
footer' $file
Ну, вы могли бы использовать здесь документ
tee > /tmp/otherfile <<EOF
header
$(cat $file)
footer
EOF
А потом переименуй.
{
echo "header"
cat $file
echo "footer"
} > tmpfile
mv tmpfile $file
Это похоже на работу в zsh , но, к сожалению, не в bash .
TMPTXT="header\n"$(cat $file)"\nfooter"
echo $TMPTXT > $file
или в одну строку:
echo header\\n"$(cat $file)"\\nfooter > $file
(Я думаю, что это должно работать и в bash , за исключением того, что у меня есть некоторые проблемы с правильным переводом строк).
РЕДАКТИРОВАТЬ:
Используя echo -e, это также работает в bash в одну строку:
echo -e "header\n$(cat $file)\nfooter"