今天在论坛看到一个非常新颖的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
-
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文件的要求中去.
-
awk '{print}/ccc/{system("grep -v ^333$ b.txt")}' a.txt
[解析]
这条awk语句也是调用了grep程序过滤掉内容, 和上一个命令异曲同工之妙.
阅读(807) | 评论(0) | 转发(0) |