一、sed语法格式和选项
sed(Stream Editor)流编辑器,对标准输出或文件逐行处理。
(1)stdout | sed [option] "pattern command"
(2)sed [option] "pattern command" file
-n:只打印模式匹配行
-e:进行多项编辑
-f:编辑动作保存在文件中,指定文件执行
-r:支持扩展正则表达式
-i:直接修改文件内容
下面为例子:--------------------------------------------
‘p’为print打印command,只有此命令会把原行和匹配的都打印出来,故会重复两遍,所以我们要加上参数。
-e对有多项编辑的时候使用
实际工作中有的命令特别复杂,我们把它保存在一个文件里,我们在命令行指定-f使用文件即可
上面的-e两个选项,也可以用一个扩展正则表达式来匹配
参数s:替换文本,
s/pattern-to-find/replacement-pattern/[g p w n]
后面不加参数是将第1个查到的替换,若加g表明全局替换。但此时并不会影响原文件。想要修改原文件要用-i
二、sed中pattern详解
10command:匹配到第10行
10,20command:匹配从第10行开始,到第20行结束
10,+5command:匹配从第10行开始,到第15行结束
/pattern1/command:匹配到pattern1的行,可以在字符串也可以是正则表达式
/pattern1/,/pattern2/command:匹配到pattern1的行开始,到匹配到pattern2的行结束
10,/pattern1/command:匹配从第10行开始,到匹配到pattern1的行结束
/pattern1/,10command:匹配到pattern1的行开始,到第10行匹配结束
pattern里转义字符
三、sed中编辑命令详解
p:打印
d:删除
a:行后追加一行 (固定写法中间加空格: a 追加内容)
i:行前追加一行
r:将后面指定文件的内容追加到匹配行后面
w:将匹配的内容写到指定文件里
s:修改(1)s/pattern/string/ 查找并将匹配行内的第一个匹配的替换
(2)s/pattern/string/g 查找并全部替换
(3)s/pattern/string/2g 同一行内,只替换从第2个开始到剩下所有的
(4)s/pattern/string/ig 忽略大小写,全局替换
=:显示行号
&:反向引用,只前面匹配的变量
下面为例子:--------------------------------------------
删除匹配的行
a追加,a<空格><追加内容>,i行前增加,i<空格><增加内容>
r读取文件内容然后行后增加文件内容,r<空格><文件名称>
w写入文件内容到指定文件,文件若不存在则自动创建,w<空格><文件名称>
s后面不配合g,则只替换行内第一个匹配的
s后面匹配g的情况
=显示行号
&反向引用,比如把test tuct等后面加个s
练习:用脚本把某个文件的test全部替换成dev,注意脚本里pattern里用了变量,外面用双引号;或者外面使用单引号,变量也要用单引号
四、脚本练习
练习1:---------------------------------------------
如下图的配置文件,实现输出section名称和里面对应配置项的个数
实现脚本:定义两个函数,一个实现找到所有中括号里面的segname,一个实现根据segname计算出下面配置项的总和
最终输出结果:
练习2:---------------------------------------------
删除配置文件中所有注释行和空行
在配置文件中所有不以#开头的行前面加*符号,非#开头匹配用/^[^#]/