Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2980258
  • 博文数量: 272
  • 博客积分: 5544
  • 博客等级: 大校
  • 技术积分: 5496
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-08 00:48
个人简介

  每个人都要有一个骨灰级的爱好,不为金钱,而纯粹是为了在这个领域享受追寻真理的快乐。

文章分类

全部博文(272)

文章存档

2015年(2)

2014年(5)

2013年(25)

2012年(58)

2011年(182)

分类: LINUX

2011-11-09 14:32:45

这个问题困扰我很久,从一开始学习 awk&sed 开始就怀着这个疑问,因为 sed 有 -i 参数,今天看到waker老大的一个回复后,得到答案。


  1. $ cat file
  2. a
  3. b
  4. c

  5. $ awk '/a/{$0="-"}1' file 1<>file

  6. $ cat file
  7. -
  8. b
  9. c
[解析]
其实是利用了FD作为一个过渡,FD1读入awk的执行结果,然后再写回file文件中。这个技巧同样能用于其他命令,比如 tr 。
以后有复杂的文本编辑不能使用sed -i,又不想awk写临时文件的同学们就用这个办法吧。


利用其他FD:
  1. awk '/a/{$0="-"}1' file 5<>file >&5
特别注意,此方法操作有一定不可以预见的失败。谨慎使用。
阅读(2637) | 评论(1) | 转发(2) |
给主人留下些什么吧!~~

irockey2017-04-17 20:57:31

awk -F \',\' \'$1~/1730309/ && 20170408103000<$4 && $4 <20170414162500{$3=$3*0.6;OFS=\",\";}1\' /home/2017-04 1<>/home/2017-04
楼主,我使用这个方法的时候,每次文件末尾都会有增加n行,规律不是很懂,但直接输出的结果却是正确的,想请教下哪里出问题了