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

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

文章分类

全部博文(272)

文章存档

2015年(2)

2014年(5)

2013年(25)

2012年(58)

2011年(182)

分类: LINUX

2013-11-19 00:10:06

    今天在论坛看到一个非常新颖的sed运用, 就是关于sed对两个文件的操作, sed对两个文件的操作不是很方便, 不像awk一样, 一般插入内容用r内建函数, 而且在一些符号控制上还比较麻烦. 本文讲一个非常独特的效果.

cat a.txt
aaa
bbb
ccc
ddd

cat b.txt
111
222
333
444

要求在a.txt文件的的ccc行后面插入b.txt文件内容, 并且要过滤掉333这一样, 得到这样的结果:
aaa
bbb
ccc
111
222
444
ddd





  1. sed '/^ccc$/{p;s##sed '/333/d' b.txt#e}' a.txt
[解析]
    这个代码非常有意思, 首先在a.txt文件中匹配到ccc的行, 然后先打印出来, 再把pattern space中的ccc内同替换成"sed '/333/d' b.txt"这条sed的命令, 并用gun sed的扩展内建函数e来执行这条命令, 这样就等于是把b.txt文件替换掉了内容并插入到a.txt文件的要求中去.



  1. awk '{print}/ccc/{system("grep -v ^333$ b.txt")}' a.txt
[解析]
    这条awk语句也是调用了grep程序过滤掉内容, 和上一个命令异曲同工之妙.


阅读(8061) | 评论(1) | 转发(8) |
给主人留下些什么吧!~~

狼眼不发光2016-02-17 10:25:56

牛B