Какой самый короткий код, который делает это? Я делал что-то вроде
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"