Chinaunix首页 | 论坛 | 博客
  • 博客访问: 50510
  • 博文数量: 15
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 125
  • 用 户 组: 普通用户
  • 注册时间: 2015-07-28 15:48
文章分类

全部博文(15)

文章存档

2018年(15)

我的朋友

分类: LINUX

2018-04-26 12:28:18

原文地址:sed之sed中调用sed执行结果 作者:zooyo

    今天在论坛看到一个非常新颖的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程序过滤掉内容, 和上一个命令异曲同工之妙.


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