这个问题困扰我很久,从一开始学习 awk&sed 开始就怀着这个疑问,因为 sed 有 -i 参数,今天看到waker老大的一个回复后,得到答案。
- $ cat file
-
a
-
b
-
c
-
$ awk '/a/{$0="-"}1' file 1<>file
-
$ cat file
-
-
-
b
-
c
[解析]
其实是利用了FD作为一个过渡,FD1读入awk的执行结果,然后再写回file文件中。这个技巧同样能用于其他命令,比如 tr 。
以后有复杂的文本编辑不能使用sed -i,又不想awk写临时文件的同学们就用这个办法吧。
利用其他FD:
- awk '/a/{$0="-"}1' file 5<>file >&5
特别注意,此方法操作有一定不可以预见的失败。谨慎使用。
阅读(2687) | 评论(1) | 转发(2) |