我不想要:
$ cat file > dummy; $ cat header dummy > file
我想要类似于下面的命令,但是到了开头,而不是结束:
$ cat header >> file
答案 0 :(得分:10)
如果不重写文件,则无法附加到文件的开头。你给出的第一种方法是正确的方法。
答案 1 :(得分:3)
如果您可以直接在命令中嵌入标题字符串,那么在sed中很容易做到:
$ sed -i "1iheader1,header2,header3"
或者,如果您真的想从文件中读取它,可以使用bash的帮助来完成:
$ sed -i "1i$(<header)" file
请注意,&#34; -i&#34; 用结果覆盖输入文件。如果您想要sed进行备份,请将其更改为&#34; -i.bak&#34;或类似的,当然总是首先测试临时目录中的样本数据,以确保您了解在应用真实数据之前会发生什么。
答案 2 :(得分:2)
整个虚拟文件很烦人。这是我尝试过的单线解决方案,似乎有效。
echo "`cat header file`" > file
勾选使引号内的部分首先执行,这样它就不会抱怨输出文件是输入文件。这似乎与hhh的解决方案有关,但有点短。我想如果文件非常大,这可能会导致问题,因为看起来好像我已经看到shell抱怨嘀嗒声制作命令的时间太长了。在某处,首先执行的部分必须存储在缓冲区中,以便原始文件可以被覆盖,但我不足以知道缓冲区的内容/位置或者可能有多大。
答案 3 :(得分:1)
如果没有读取文件的所有内容并使用前置文本+文件内容编写新文件,则无法在文件前添加文件。将Unix中的文件视为字节流 - 它很容易附加到流的末尾,但是没有简单的操作来“回放”流并写入它。即使对文件开头的查找操作也会覆盖您编写的任何数据的开头。
答案 4 :(得分:1)
一种可能性是使用here-document:
cat > "prependedfile" << ENDENDEND
prepended line(s)
`cat "file"`
ENDENDEND
这个技巧可能存在内存限制。
答案 5 :(得分:0)
感谢正确的搜索结果!
echo "include .headers.java\n$(cat fileObject.java )" > fileObject.java
然后使用文件:
echo "$(cat .headers.java)\n\n$(cat fileObject.java )" > fileObject.java
答案 6 :(得分:0)
如果你想预先挂起&#34;标题&#34;到&#34;文件&#34;为什么不追加&#34;文件&#34;到&#34;标题&#34;
cat file >> header
答案 7 :(得分:0)
下面是一个简单的c-shell尝试来解决这个问题。这&#34; prepend.sh&#34;脚本有两个参数:
#!/bin/csh if (if ./tmp.txt) then rm ./tmp.txt endif cat $1 > ./tmp.txt cat $2 >> ./tmp.txt mv $2 $2.bak mv ./tmp.txt $2