Linux之sed的用法

Linuxsed的用法

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  #显示第二到最后一行

#Pn要同时出现

查询某行:

[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文件15行删除,然后将剩余内容中的/sbin替换成shedong,然后输出到荧幕上】




发布了19 篇原创文章 · 获赞 17 · 访问量 10万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章