我正在尝试将一些版权信息插入到某些源文件的开头。我知道以下列方式使用sed:
sed "1iSome copyrighted information." sample.txt
会将文本“一些受版权保护的信息”插入sample.txt的开头
我需要将文件中的文本插入到sample.txt的开头。在sed中有什么方法我可以使用cat
命令用于上述目的,如下所示:
sed "1i{cat header.txt}" sample.txt
我已经搜索了上述内容,并没有找到我一直在寻找的内容。对此有任何帮助是最受欢迎的。
感谢。
答案 0 :(得分:9)
如果你有GNU sed
:
sed -i -e '2{x;G};1{h;rheader.txt' -e 'd}' sample.txt
sample.txt必须至少包含两行。
即使头文件包含sed
特有的字符,此方法仍然有效。
说明:
-i
- 正确编辑文件-e
- 将脚本分成几部分 - 在这种情况下,必须分隔标题文件名的末尾(它也可以用换行符分隔)1{h;
- 在文件的第一行(sample.txt)将其保存到容纳空间rheader.txt
- 读入头文件(header.txt)d}
- 从模式空间中删除文件的原始第一行并结束第1行的处理 - 在此处删除它可防止在文件开头插入额外的空行2{x;
- 当读取文件的第2行(sample.txt)时,将其交换到保留空间并将保持空间(包含原始行1)交换到模式空间G}
- 将持有空间附加到模式空间的末尾(现在包含原始行1和2)并完成第2行的处理修改:我从我最初发布的版本中删除了一条多余的命令。
答案 1 :(得分:9)
很抱歉用完整个答案 - 只是为了格式化:)基本上,来自@tangens的相同答案,但没有临时文件:
echo "$(cat header.txt sample.txt)" > sample.txt
注意引号("
)以保留行结尾,以及cat
并置在子进程中运行的事实 - 因此不应该覆盖文件({ {1}})可以阅读..
干杯!
答案 2 :(得分:8)
使用ed文本编辑器:
echo -e '0r header.txt\nw' | ed sample.txt
或使用vi / ex命令:
vi - +'0r header.txt|wq' sample.txt
但是我没有看到任何在sed中运行命令的方法。
答案 3 :(得分:4)
cat header.txt sample.txt > temp.txt
mv temp.txt sample.txt
答案 4 :(得分:1)
如果您真的想使用sed
:
INFO=$(cat header.txt) # read the contents of file headers.txt into var INFO
sed -i "1i$INFO" sample.txt # insert $INFO, use -i to change the file inplace
但我会使用基于cat
的方法。
答案 5 :(得分:0)
为什么不反过来这样做,例如将源文件附加到您的版权文件?
'cat'命令实际上是'连接'的缩写,你可以简单地说
for f in *.c
do
cp $f /tmp
cat copyright.txt /tmp/$f >$f
done