linux的sed命令

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

 

使用

基本的执行流程是:按条件搜索,然后执行命令,条件用address来表示,命令用command表示

 sed [-nefr] ‘AddressCommand' file

参数:

-n :使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN 的数据一般都会被列出到终端上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。

-e :直接在命令列模式上进行 sed 的动作编辑;

-f :直接将 sed 的动作写在一个文件内, -f filename 则可以运行 filename 内的 sed 动作;

-r :sed 的动作支持的是延伸型正规表示法的语法。(默认是基础正规表示法语法)

-i :直接修改读取的文件内容,而不是输出到终端。

 

Address:

1.startline , endline 起始结束行

     如 1,10 表示1到10行

2,/RegExp/ 正则表达式

     /^root/ 表示以root字符串开头的行

3./pattern1/,/pattern2/,第一次被pattern1匹配到的行开始,到第一次被pattern2匹配到的行结束

     如:/hello/,/china/

4,lineNumber 指定的行

     如:3 表示第三行,$表示最后一行,$-1表示倒数第二行

5,startLine,+N 从startLine开始,向后的N行

     如:10,+5

 

Command:

a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~

          例子:

          在包含了hello的行后面添加一行,内容为newline

         $ sed '/hello/a \# newline’ test.txt  

c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!

          例子:

          将第二行到第五行内容换为字符串#hello wlrd'

          sed '2,5c \#hello wlrd' test.txt

          将含有china的行替换为字符串new china

         sed '/china/c \new china' test.txt

d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;

          例子:

          将第二行到第五行删除

          sed '2,5d' test.txt

          将包含了china的行删除

          sed '/china/d' test.txt

i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);

          例子:

          在第二到第一行的上面插入一行,内容为newline

          sed '2,5i newline' test.txt

          在含有china的行上面插入一行,内容为newline

          sed '/china/i \newline' test.txt

p :列印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~

          例子:

          #打印出第二到第五行

          sed -n '2,5p' test.txt

          #打印出包含了字符串china的行

          sed -n '/china/p' test.txt

s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦!

          例子:

          #将china字符串替换成字符串newchina

          sed  's/china/newchina/g' test.txt

          #将第二行到第五行的字符串chia替换为字符串newchina

          sed '2,5s/china/newchina/g' test.txt

搜索数据并进行命令处理

          #搜索包含字符串china的行作为内容用{}里面的命令进行处理({}里可多个命令,每个命令用分号分隔)

          sed  -n '/china/{s/country/nation/;p}' test.txt

将操作结果输出到另一个文件

           sed  -n '/china/{s/country/nation/;p}' test.txt > temp.txt

发表评论