实现这个的最短代码是什么?我一直在做类似的事情
echo "header" > tmpfile
cat $file >> tmpfile
echo "footer" >> tmpfile
mv tmpfile $file
有没有更紧凑的方法?
答案1
{
echo "header"
cat $file
echo "footer"
} > tmpfile
mv tmpfile $file
答案2
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
答案3
你可以使用 Here 文档
tee > /tmp/otherfile <<EOF
header
$(cat $file)
footer
EOF
然后重命名。
答案4
这似乎在 中有效zsh
,但不幸的是在 中无效bash
。
TMPTXT="header\n"$(cat $file)"\nfooter"
echo $TMPTXT > $file
或者在一行中:
echo header\\n"$(cat $file)"\\nfooter > $file
bash
(我认为这也应该可行,只是我在正确输入换行符方面遇到了一些麻烦。)
编辑:
bash
使用 echo -e 这也可以在一行中起作用:
echo -e "header\n$(cat $file)\nfooter"