您的位置:首页 > 其它

Sed命令用法总结

2016-06-07 17:48 309 查看

一、Sed命令介绍

sed是一种流编辑器,它是文本处理中非常中的工具,能够完美的配合正则表达式使用,功能不同凡响。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有
改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。

二、Sed命令格式

sed [options] 'command' file(s)
sed [options] -f scriptfile file(s)
常用选项:

-n∶使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN的资料一般都会被列出到萤幕上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。
-e∶直接在指令列模式上进行 sed 的动作编辑;
-f∶直接将 sed 的动作写在一个档案内, -f filename 则可以执行 filename 内的sed 动作;
-r∶sed 的动作支援的是延伸型正规表示法的语法。(预设是基础正规表示法语法)
-i∶直接修改读取的档案内容,而不是由萤幕输出。
常用命令:

a  ∶新增,a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
b  ∶lable 分支到脚本中带有标记的地方,如果分支不存在则分支到脚本的末尾
c  ∶取代,c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
d  ∶删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
D  ∶删除模板块的第一行
g  ∶获得内存缓冲区的内容,并替代当前模板块中的文本
G  ∶获得内存缓冲区的内容,并追加到当前模板块文本的后面
h  ∶拷贝模板块的内容到内存中的缓冲区
H  ∶追加模板块的内容到内存中的缓冲区
i  ∶插入,i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行)
l  ∶列表不能打印字符的清单
n  ∶读取下一个输入行,用下一个命令处理新的行而不是用第一个命令
N  ∶追加下一个输入行到模板块后面并在二者间嵌入一个新行,改变当前行号码
p  ∶打印模板块的行,即将某个选择的资料印出。通常 p 会与参数 sed -n 一起运作~
p  ∶P(大写) 打印模板块的第一行
q  ∶退出Sed
r  ∶file 从file中读行
s  ∶取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法
t  ∶label if分支,从最后一行开始,条件一旦满足或者T,t命令,将导致分支到带有标号的命令处,或者到脚本的末尾
T  ∶label 错误分支,从最后一行开始,一旦发生错误或者T,t命令,将导致分支到带有标号的命令处,或者到脚本的末尾
w  ∶file 写并追加模板块到file末尾。 W file 写并追加模板块的第一行到file末尾
!  ∶表示后面的命令对所有没有被选定的行发生作用
=  ∶打印当前行号码
#  ∶把注释扩展到下一个换行符以前

三、应用举例

1、删除某行

[root@localhost Linux] # sed '1d' ab             #删除第一行
[root@localhost Linux] # sed '$d' ab             #删除最后一行
[root@localhost Linux] # sed '1,2d' ab           #删除第一行到第二行
[root@localhost Linux] # sed '2,$d' ab           #删除第二行到最后一行
2、显示某行

[root@localhost Linux] # sed -n '1p' ab          #显示第一行
[root@localhost Linux] # sed -n '$p' ab          #显示最后一行
[root@localhost Linux] # sed -n '1,2p' ab        #显示第一行到第二行
[root@localhost Linux] # sed -n '2,$p' ab        #显示第二行到最后一行
3、增加一行或多行字符串

[root@localhost Linux]# cat ab
Hello!
Linux is me,welcome to my blog.
end
[root@localhost Linux] # sed '1a drink tea' ab  #第一行后增加字符串"drink tea"
Hello!
drink tea
Linux is me,welcome to my blog.
end
[root@localhost Linux] # sed '1,3a drink tea' ab #第一行到第三行后增加字符串"drink tea"
Hello!
drink tea
Linux is me,welcome to my blog.
drink tea
end
drink tea
[root@localhost Linux] # sed '1a drink tea\nor coffee' ab   #第一行后增加多行,使用换行符\n
Hello!
drink tea
or coffee
Linux is me,welcome to my blog.
end
4、替换一行或多行

[root@localhost Linux] # sed '1c Hi' ab                #第一行代替为Hi
Hi
Linux is me,welcome to my blog.
end
[root@localhost Linux] # sed '1,2c Hi' ab             #第一行到第二行代替为Hi
Hi
end
5、替换一行中的某部分

格式:sed 's/要替换的字符串/新的字符串/g'   (要替换的字符串可以用正则表达式)
[root@localhost Linux] # sed -n '/Linux/p' ab | sed 's/Linux/bird/g'    #替换Linux为bird
[root@localhost Linux] # sed -n '/Linux/p' ab | sed 's/Linux//g'        #删除Linux
6、插入

[root@localhost Linux] # sed -i '$a bye' ab         #在文件ab中最后一行直接输入"bye"
[root@localhost Linux] # cat ab
Hello!
Linux is me,welcome to my blog.
end
bye
7、删除匹配行

sed -i '/匹配字符串/d'  filename  (注:若匹配字符串是变量,则需要“”,而不是‘’。记得好像是)

替换匹配行中的某个字符串

sed -i '/匹配字符串/s/替换源字符串/替换目标字符串/g' filename


等等……
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: