这可能是
a complex solution。
我正在寻找一个简单的运算符,如“>>”,但用于前置。
恐怕它不存在。我必须做一些事情
mv myfile tmp cat myheader tmp > myfile
什么更聪明? (我不喜欢tmp文件)
下面的黑客是一个快速的off-the-cuff答案工作,并收到很多upvote。然后,随着问题变得越来越流行,越来越多的时间流逝,愤怒的人开始报告说,它排序工作,但奇怪的事情可能发生,或者它根本没有工作,所以它被愤怒地downvote一段时间。好好玩。
该解决方案利用了您的系统上的文件描述符的确切实现,并且因为实现在nix之间显着变化,它的成功是完全系统依赖,绝对不可移植的,不应该被依赖于任何甚至是非常重要的。
现在,所有的方式的答案是:
为文件(exec 3> yourfile)创建另一个文件描述符,然后写入(>& 3)似乎克服了对同一文件困境的读/写。为我工作在600K文件与awk。但是使用“cat”尝试相同的技巧失败。
将前缀作为变量传递给awk(-v TEXT =“$ text”)可以克服字面引用问题,这会阻止使用“sed”这个技巧。
#!/bin/bash text="Hello world What's up?" exec 3<> yourfile && awk -v TEXT="$text" 'BEGIN {print TEXT}{print}' yourfile >&3