Linux之sed的用法
Sed命令简介:sed是一个很好的文本处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据进行替换、删除、增添、选取等工作。
注意:sed命令只是读取在命令行指定的文件,将其用作输入,它不试图修改文件。
Sed命令行格式:
sed -参数 ‘command’ 文本
常用参数:
-n:使用安静模式。在一般的sed的用法中,所有来自STDIN【标准输入】的资料都会被列出到屏幕上。但是如果加上-n参数后,只有经过sed处理过的那一行才会被列出来。
-i∶直接修改读取的档案内容,而不是由萤幕输出
-e 允许多重编辑
常用command:
= :显示文件行号
a:新增,a后面接字符串,这些字符串会在目前行的下一行出现
d:删除,因为是删除,所以d后面通常不接任何字符串
i:插入,i后面接字符串,这些字符串会在目前行的上一行出现
p:列印,即将某个选择的资料列出。通常p会与参数n一起使用
c:取代,c后面可以接字符串,这些字符串可以取代你指定的行
s:取代,这个取代是将文本里的关键字进行取代,通常这个s的动作可以搭配正则表示法。
替换的命令格式为:‘s///g’,g表示sed执行全局替换,如果末尾没有g,则sed的替换操作只对文本中第一次出现的字符串有效。/也可以替换成其它的字符,比如‘s///g’=‘s:::g’
Sed中使用的规则表达式字符
^ : 与行首进行匹配
$ :与行尾进行匹配
. :与任意一个字符进行匹配
* :与任意一个字符的零个或者多个出现匹配
[] :与[]内的任何一个字符进行匹配
Sed中的规则表达式实例
/./ :将与包含至少一个字符的任何行进行匹配
/../ : 将与包含至少一个字符的任何行进行匹配
/^#/ :将与以‘#’开头的任意行匹配,通常这是注释
/^$/ : 将与所有空行进行匹配
/}$/ : 将与‘}’结束的任意行匹配
/} *^/ :注意在}后面有一个空格,这将与‘}’后面跟随零个或多个空格结束的任意行就行匹配
/[abc]/ :将与包含小写字母‘a’‘b’‘c’的任意行匹配
/^[abc]/ :将与‘a’‘b’或‘c’开始的任何行匹配
实例演示:
删除某行:
[root@desktop Desktop]# sed '1d' dong #删除第一行
[root@desktop Desktop]# sed '$d' dong #删除最后一行
[root@desktop Desktop]# sed '1,2d' dong #删除一到二行
[root@desktop Desktop]# sed '2,$d' dong #删除二到最后一行
显示某行:
[root@desktop Desktop]# sed -n '1p' dong #显示第一行
[root@desktop Desktop]# sed -n '$p' dong #显示最后一行
[root@desktop Desktop]# sed -n '1,2p' dong #显示第一到第二行
[root@desktop Desktop]# sed -n '2,$p' dong #显示第二到最后一行
#P与n要同时出现
查询某行:
[root@desktop Desktop]# sed -n '/root/p' dong #查询含有关键字root的行
[root@desktop Desktop]# sed -n '/\$/p' dong #查询含有关键字$所在的行,使用反斜线\屏蔽特殊含义
增加一行或者多行字符串:
[root@desktop Desktop]# cat dong
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2i$:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp$:/var/spool/lpd:/sbin/nologin
[root@desktop Desktop]# sed '1a wahaha' dong #在第一行增加字符串wahaha
【a:新增,a后面接字符串,这些字符串会在目前行的下一行出现】
root:x:0:0:root:/root:/bin/bash
wahaha
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2i$:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp$:/var/spool/lpd:/sbin/nologin
[root@desktop Desktop]# sed '1,3a shell' dong #第一行到第三行后增加字符串“shell”
root:x:0:0:root:/root:/bin/bash
shell
bin:x:1:1:bin:/bin:/sbin/nologin
shell
daemon:x:2i$:2:daemon:/sbin:/sbin/nologin
shell
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp$:/var/spool/lpd:/sbin/nologin
[root@desktop Desktop]# sed '1a drink tea\nor coffee' dong
#第一行后增加多行,使用换行符\n
root:x:0:0:root:/root:/bin/bash
drink tea
or coffee
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2i$:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp$:/var/spool/lpd:/sbin/nologin
代替一行或者多行:
【c:取代,c后面可以接字符串,这些字符串可以取代你指定的行】
[root@desktop Desktop]# sed '1c shedong' dong #将第一行替代为shedong
注释:这个时候
shedong
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2i$:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp$:/var/spool/lpd:/sbin/nologin
[root@desktop Desktop]# sed '1,2c shedong' dong #将一到二行代替为shedong
注释:这个时候前两行变成了一行
shedong
daemon:x:2i$:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp$:/var/spool/lpd:/sbin/nologin
替代一行中的某个部分:
[root@desktop Desktop]# sed 's/root/xiangjiao/g' dong #将关键字root替换成xiangjiao
xiangjiao:x:0:0:xiangjiao:/xiangjiao:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2i$:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp$:/var/spool/lpd:/sbin/nologin
[root@desktop Desktop]# sed 's/root//g' dong #删除关键字root
:x:0:0::/:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2i$:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp$:/var/spool/lpd:/sbin/nologin
插入:
[root@desktop Desktop]# sed -i '$a byebye' dong #在文件dong最后增加一行byebye
[root@desktop Desktop]# cat dong
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
Byebye
【注意:这个时候已经将文件内容修改了,之前没有使用-i参数的时候只是将文件作为标准输入并没有修改原文件本身】
= 的演示:
也可以这样表示:
[root@redhat1 ~]# sed -n '=;p' testone
使用分号隔开多个sed命令
注意:当我们有多条命令的时候,-e命令也不够使用。这个时候,可以将命令写入文本文件中,然后通过-f参数引用命令,文本文件以.sed结尾
示例如下:
【这个sed文本文件内容的意思是将dong文件1~5行删除,然后将剩余内容中的/sbin替换成shedong,然后输出到荧幕上】