sed和awk的区别还是蛮大的..
awk趋向于针对每行进行单独处理,处理的最小单位是行中的每个域..对每行的处理基本是独立的..我们不能苛求他可以把多行整合起来处理(当然,借助变量我们还是可以做到的..)
sed则是完全针对文件流的..处理的最小单位就是行..他并不对行内容进行划分..而是作为匹配的整体进行操作的..
其实..理论上awk和sed能做到的..vim基本都可以做到..但我们为什么还要用这两个呢?
我想..原因无非有二:
1.awk.sed可以操作任意大的文件..因为每次处理都是针对行..而不是整个文件..相反,传统编辑器vim都是直接对文件进行缓冲的..所以太大的会导致很恐怖的swap文件
2.awk.sed可以指令话..不像vim这类必须手动操作
下面是sed使用的基础..
基本格式还是三种
1.sed option 'command' file
2.sed option -f script file
3../script file 脚本文件开头必须是#!/bin/sed
其实可以看到..格式和awk差不多..
选项记住两个常用的..一个是-n(noprint)..默认sed会把输入文件都输出到标准输出..加了这个选项之后就不会了..另一个是-f..主要用于运行脚本文件..注意的是脚本文件中就不需要在''内部了..
命令中我们首先是选定操作的行..匹配方式有三种
1.选定行数..这个我们通过x,y来选定第x-y行..如果反向选择的话.则为x,y!..y可以省略..则成了针对某一行..此处可以使用$代表最后一行
2.模式匹配..在//之间即可选定匹配..使用基本正则表达式..如果要用扩展型的话..需要加-r选项
3混合匹配..也就是行数+模式..用","隔开就可以了..先后一致
常用命令:
p:print 打印匹配行
=:打印行号
a:对应行后添加文字..换行的话用"\"即可..最后没有"\"当作输入结尾
i:类似a..只是在行之前插入.
d:删除行
c:用对应文字替换对应行
s:进行正则替换..s/pattern/text/option 默认情况下(即没有option)替换第一个匹配式..选项有g(全部替换),p(打印输入.可以取消掉-n的作用),w(将输出导向到某文件)
r:从某文件中读入..并插入到匹配行
w:将匹配行写入到某文件
q:匹配到第一项时直接退出
l:输出控制字符
同awk类似..使用{}进行多语句命令的输入..
不过同awk不同..sed貌似没有强大的逻辑控制能力..比如没有逻辑判断和循环.当然..这也可能是由于sed的定位不同..sed更侧重于编辑文本..而不是像awk那样获取文本信息进行操作..
还是那句话..需要多多的练习才能体会到sed的强大