1、sed格式命令正则表达式
sed 命令行格式为:sed [选项] 'command' 输入文本
2、sed命令的选项缓存
sed [选项] [动做] 选项与参数: -n :使用安静(silent)模式。在通常 sed 的用法中,全部来自 STDIN 的数据通常都会被列出到终端上。但若是加上 -n 参数后,则只有通过sed 特殊处理的那一行(或者动做)才会被列出来。 -e :直接在命令列模式上进行 sed 的动做编辑; -f :直接将 sed 的动做写在一个文件内, -f filename 则能够运行 filename 内的 sed 动做; -r :sed 的动做支持的是延伸型正规表示法的语法。(默认是基础正规表示法语法) -i :直接修改读取的文件内容,而不是输出到终端。
功能说明: a :新增行, a 的后面能够是字串,而这些字串会在新的一行出现(目前的下一行) c :取代行, c 的后面能够接字串,这些字串能够取代 n1,n2 之间的行 d :删除行,由于是删除,因此 d 后面一般不接任何参数,直接删除地址表示的行; i :插入行, i 的后面能够接字串,而这些字串会在新的一行出现(目前的上一行); p :列印,亦即将某个选择的数据印出。一般 p 会与参数 sed -n 一块儿运行 s :替换,能够直接进行替换的工做,一般这个 s 的动做能够搭配正规表示法,例如 1,20s/old/new/g 通常是替换符合条件的字符串而不是整行 通常function的前面会有一个地址的限制,例如 [地址]function,表示咱们的动做要操做的行。下面咱们经过具体的例子直观的看看sed的使用方法。
3、Sed定位sass
Sed命令在没有给定的位置时,默认会处理全部行;spa
Sed支持如下几种地址类型:命令行
一、first ---- step3d
这两个单词的意思:first 指起始匹配行,step指步长,例如:sed -n 2~5p 含义:从第二行开始匹配,隔5行匹配一次,即2,7,12.。。。。code
二、$对象
这个$符表示匹配最后一行。blog
三、/REGEXP/ci
这个是表示正则那一行,经过//之间的正则来匹配
四、\cREGEXPc
这个是表示匹配正则那一行,经过\c和c之间的正则来匹配,c能够是任意字符
5、 addr1, add2
定址 addr1, add2 决定用于对哪些行进行编辑。地址的形式能够是数字、正则表达式或两者的结合。若是没有指定地址, sed 将处理输入文件中的全部行。若是定址是一个数字,则这个数字表明行号,若是是逗号分隔的两个行号,那么须要处理的定址就是两行之间的范围(包括两行在内)。范围能够是数字,正则或两者组合。
6、 addr1, +N
从 addr1 这行到往下 N 行匹配,总共匹配 N+1 行
4、Sed的正则表达式
表 1: sed 的正则表达式元字符
|
表 2.sed 的经常使用选项
选项 | 说明 |
-n | 使用安静模式,在通常状况全部的 STDIN 都会输出到屏幕上,加入-n 后只打印 被 sed 特殊处理的行 |
-e | 多重编辑,且命令顺序会影响结果 |
-f | 指定一个 sed 脚本文件到命令行执行, |
-r | Sed 使用扩展正则 |
-i | 直接修改文档读取的内容,不在屏幕上输出 |
5、Sed 操做命令
sed 操做命令告诉 sed 如何处理由地址指定的各输入行。若是没有指定地址, sed 就会处理输入的全部的行。表 3.sed 命令
命 令 | 说 明 |
a\ | 在当前行后添加一行或多行 |
c\ | 用新文本修改(替换)当前行中的文本 |
d | 删除行 |
i\ | 在当前行以前插入文本 |
h | 把模式空间里的内容复制到暂存缓存区 |
H | 把模式空间里的内容追加到暂存缓存区 |
g | 取出暂存缓冲区里的内容,将其复制到模式空间,覆盖该处原有内容 |
G | 取出暂存缓冲区里的内容,将其复制到模式空间,追加在原有内容后面 |
l | 列出非打印字符 |
p | 打印行 |
n | 读入下一输入行,并从下一条命令而不是第一条命令开始处理 |
q | 结束或退出 sed |
r | 从文件中读取输入行 |
! | 对所选行意外的全部行应用命令 |
s | 用一个字符串替换另外一个 |
表 4.替换标志
g | 在行内进行全局替换 |
p | 打印行 |
w | 将行写入文件 |
x | 交换暂存缓冲区与模式空间的内容 |
y | 将字符转换为另外一字符(不能对正则表达式使用 y 命令) |
6、sed使用实例
数据准备 northwest NW Charles Main 3.0 .98 3 34 western WE Sharon Gray 5.3 .97 5 23 southwest SW Lewis Dalsass 2.7 .8 2 18 southern SO Suan Chin 5.1 .95 4 15 southeast SE Patricia Hemenway 4.0 .7 4 17 eastern EA TB Savage 4.4 .84 5 20 northeast NE AM Main Jr. 5.1 .94 3 13 north NO Margot Weber 4.5 .89 5 9 central CT Ann Stephens 5.7 .94 5 13
一、打印:p命令
命令p是打印命令,用于显示模式缓存区的内容。默认状况下,sed把输入行打印在屏幕上,选项-n用于取消默认打印操做。当选项-n和命令p同时出现时,sed可打印选定的内容
案例一:当仅仅出现p打印命令时,sed 把全部输入行都打印在标准输出上。若是在某一行匹配到 north, sed就把该行另外打印一遍(如红色标记)。
[root@master mnt]# sed '/north/p' sedTest.txt northwest NW Charles Main 3.0 .98 3 34 northwest NW Charles Main 3.0 .98 3 34 western WE Sharon Gray 5.3 .97 5 23 southwest SW Lewis Dalsass 2.7 .8 2 18 southern SO Suan Chin 5.1 .95 4 15 southeast SE Patricia Hemenway 4.0 .7 4 17 eastern EA TB Savage 4.4 .84 5 20 northeast NE AM Main Jr. 5.1 .94 3 13 northeast NE AM Main Jr. 5.1 .94 3 13 north NO Margot Weber 4.5 .89 5 9 north NO Margot Weber 4.5 .89 5 9 central CT Ann Stephens 5.7 .94 5 13 [root@master mnt]# sed -n '/north/p' sedTest.txt northwest NW Charles Main 3.0 .98 3 34 northeast NE AM Main Jr. 5.1 .94 3 13 north NO Margot Weber 4.5 .89 5 9
案例二:当p打印命令和n同时出现时
说明:默认状况下, sed 打印当前缓存区中的输入行。命令 p 指示 sed 将再次打印该行。选项-n 取消 sed 取消默认打印操做。选项-n 和命令配合使用,模式缓冲区内的输入行,只被打印一次。若是不指定-n 选项, sed 就会像上例中那样,打印出重复的行。若是指定了-n,则sed 只打印包含模式 north 的行。
[root@master mnt]# sed -n '/north/p' sedTest.txt northwest NW Charles Main 3.0 .98 3 34 northeast NE AM Main Jr. 5.1 .94 3 13 north NO Margot Weber 4.5 .89 5 9
二、删除:d命令
命令d用于删除输入行。sed先将输入行从文件复制到缓存区,而后对该行执行sed命令,最后将模式缓存区的内容显示在屏幕上。若是发出的是命令d,当前模式缓存区的输入行会被删除,不被显示。可是在文件中该行是没有被删除的。
案例三:
删除第 3 行。默认状况下,其他的行都被打印到屏幕上。
[root@master mnt]# sed '3d' sedTest.txt northwest NW Charles Main 3.0 .98 3 34 western WE Sharon Gray 5.3 .97 5 23 southern SO Suan Chin 5.1 .95 4 15 southeast SE Patricia Hemenway 4.0 .7 4 17 eastern EA TB Savage 4.4 .84 5 20 northeast NE AM Main Jr. 5.1 .94 3 13 north NO Margot Weber 4.5 .89 5 9 central CT Ann Stephens 5.7 .94 5 13
案例4:
删除从第三行到最后一行内容,剩余各行被打印。地址范围是开始第 3 行,结束最后一行。
[root@master mnt]# sed '3,$d' sedTest.txt northwest NW Charles Main 3.0 .98 3 34 western WE Sharon Gray 5.3 .97 5 23
案例5:全部包含模式 north 的行都被动删除,其他行被打印。
[root@master mnt]# sed '/north/d' sedTest.txt western WE Sharon Gray 5.3 .97 5 23 southwest SW Lewis Dalsass 2.7 .8 2 18 southern SO Suan Chin 5.1 .95 4 15 southeast SE Patricia Hemenway 4.0 .7 4 17 eastern EA TB Savage 4.4 .84 5 20 central CT Ann Stephens 5.7 .94 5 13
三、替换:s命令
命令 s 是替换命令。替换和取代文件中的文本能够经过 sed 中的 s 来实现, s 后包含在斜杠中的文本是正则表达式,后面跟着的是须要替换的文本。能够经过 g 标志对行进行全局替换
案例 6:
s 命令用于替换。命令末端的 g 表示在行内全局替换;也就是说若是每一行里出现多个west,全部的 west 都会被替换为 north。若是没有 g 命令,则只将每一行的第一 west 替换为 north。
[root@master mnt]# sed 's/west/north/g' sedTest.txt northnorth NW Charles Main 3.0 .98 3 34 northern WE Sharon Gray 5.3 .97 5 23 southnorth SW Lewis Dalsass 2.7 .8 2 18 southern SO Suan Chin 5.1 .95 4 15 southeast SE Patricia Hemenway 4.0 .7 4 17 eastern EA TB Savage 4.4 .84 5 20 northeast NE AM Main Jr. 5.1 .94 3 13 north NO Margot Weber 4.5 .89 5 9 central CT Ann Stephens 5.7 .94 5 13
案例7:
:s 命令用于替换。选线-n 与命令行末尾的标志 p 结合,告诉 sed 只打印发生替换的那些行;也就是说,若是只有在行首找到 west 并替换成 north 时才会打印此行。
[root@master mnt]# sed -n 's/^west/north/p' sedTest.txt northern WE Sharon Gray 5.3 .97 5 23