在 bash 中使用已编辑的版本覆盖文件

在 bash 中使用已编辑的版本覆盖文件

实现这个的最短代码是什么?我一直在做类似的事情

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"

相关内容