微信扫一扫

028-83195727 , 15928970361
business@forhy.com

linux sed命令用法

sed,shell,sed用法2016-11-23

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

sed命令和选项:

sed [nefri] 'command' file(s)

常用选项:

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

常用command:

a\  新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
c\  取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
d  删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
i\  插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
p  列印,亦即将某个选择的资料印出。通常 p 会与参数 sed -n 一起运作~
s  取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦!

高级command:

命令  功能描述
h    拷贝pattern space的内容到holding buffer(特殊缓冲区)。
H    追加pattern space的内容到holding buffer。
g    获得holding buffer中的内容,并替代当前pattern space中的文本。
G    获得holding buffer中的内容,并追加到当前pattern space的后面。
n    读取下一个输入行,用下一个命令处理新的行而不是用第一个命令。
P    打印pattern space中的第一行。  //大写
q    退出sed。
w    file 写并追加pattern space到file的末尾。
!    表示后面的命令对所有没有被选定的行发生作用。
s/re/string  用string替换正则表达式re。
=    打印当前行号码。

替换标记

g    行内全面替换,如果没有g,只替换第一个匹配。
x    互换pattern space和holding buffer中的文本。
y    把一个字符翻译为另一个字符(但是不能用于正则表达式)。
需要说明的是,sed中的正则和grep的基本相同,完全可以参照本系列的第一篇中的详细说明。

打印整个文件,匹配行打印两次

sed '/1/p' sed1.txt

只打印匹配行

sed -n  '/1/p' sed1.txt

打印5-7行

sed -n '5,7p' sed1.txt

删除第三行,其他行默认打印到屏幕

sed '3d' sed1.txt

替换字符串

sed 's/《/[[/g' sed1.txt

将所有匹配写入新文件中。

sed -n '/1/w sed2.txt' sed1.txt

i是插入命令,在匹配模式行前插入文本。

sed -n '/1/i\这些是插入的文字' sed1.txt