sed中还可以执行外部的其它 shell 程序。
sed提供了单字母 e 来执行外部的 shell 程序。
e是 execute 的缩写,后者翻译为中文是 执行 的意思。
e命令的语法格式如下
[address1[,address2]]e [command]
- address1 和 address2 应该很熟悉了吧,用于 行寻址,可以是行号或模式。
- e 是执行命令
- [command] 是可选的,是外部的其它 shell 程序。
如果忽略 [command] ,e 命令会把模式缓冲区的内容当作命令。
注意: 苹果电脑自带的 sed 不支持 e 命令。
范例
范例开始前,我们先准备下要使用的数据,在当前目录下创建文件 data.txt 内容如下
1) 小明,23岁,北京大学
2) 小红,22岁,清华大学
3) 小李,25岁,斯坦福大学
4) 小王,22岁,清华大学
5) 小刚,27岁,北京大学
6) 小英,21岁,哈佛大学
date 是所有 Linux/Unix 自带的用于显示日期时间的 shell 程序,我们先运行一下看看结果
[www.ddkk.com]$ date
2019年 7月 5日 星期五 07时00分56秒 CST
date 用于输出当前的时间,精确到秒。
我们可以在 sed 中使用 e 命令来执行 date 命令.
[www.ddkk.com]$ sed 'e date' data.txt
运行结果如下
2019年 7月 5日 星期五 07时04分26秒 CST
1) 小明,23岁,北京大学
2019年 7月 5日 星期五 07时04分26秒 CST
2) 小红,22岁,清华大学
2019年 7月 5日 星期五 07时04分26秒 CST
3) 小李,25岁,斯坦福大学
2019年 7月 5日 星期五 07时04分26秒 CST
4) 小王,22岁,清华大学
2019年 7月 5日 星期五 07时04分26秒 CST
5) 小刚,27岁,北京大学
2019年 7月 5日 星期五 07时04分26秒 CST
6) 小英,21岁,哈佛大学
范例 2
我们也可以指定行来执行 e 命令
[www.ddkk.com]$ sed '3 e date' data.txt
运行结果如下
1) 小明,23岁,北京大学
2) 小红,22岁,清华大学
2019年 7月 5日 星期五 07时06分27秒 CST
3) 小李,25岁,斯坦福大学
4) 小王,22岁,清华大学
5) 小刚,27岁,北京大学
6) 小英,21岁,哈佛大学
范例 3
和其它的命令一样,sed 的执行命令 e 同样支持范围寻址。
[www.ddkk.com]$ sed '2,4 e date' data.txt
运行结果如下
1) 小明,23岁,北京大学
2019年 7月 5日 星期五 07时07分50秒 CST
2) 小红,22岁,清华大学
2019年 7月 5日 星期五 07时07分51秒 CST
3) 小李,25岁,斯坦福大学
2019年 7月 5日 星期五 07时07分51秒 CST
4) 小王,22岁,清华大学
5) 小刚,27岁,北京大学
6) 小英,21岁,哈佛大学
范例 4
除了支持 行号 寻址外,e 命令还支持模式寻址。
下面的命令当行包含 小李 时才执行 e 命令
[www.ddkk.com]$ sed '/小李/ e date' data.txt
运行结果如下
1) 小明,23岁,北京大学
2) 小红,22岁,清华大学
2019年 7月 5日 星期五 07时09分44秒 CST
3) 小李,25岁,斯坦福大学
4) 小王,22岁,清华大学
5) 小刚,27岁,北京大学
6) 小英,21岁,哈佛大学
范例 5
[command] 是可选的,如果忽略,e 命令会把模式缓冲区的内容当作命令来执行。
[www.ddkk.com]$ echo -e "date\ncal\nuname" | sed 'e'
运行结果如下
2019年 7月 5日 星期五 07时13分44秒 CST
七月 2019
日 一 二 三 四 五 六
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Darwin