sed命令是一个面向字符流的非交互式编辑器,也就是说sed不允许用户与它进行交互操作。sed是按行来处理文本内容的。

首先谈一下sed常用的常用格式为:sed[选项] [动作]

常用选项:

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

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

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

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

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

function

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

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

  d:删除行,因为是删除,所以d后面通常不接任何参数,直接删除地址表示的行。

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

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

  s:替换,可以直接进行替换的工作,通常这个s的动作可以搭配正规表示法,例如1,20s/old/new/g一般是替换符合条件的字符串而不是整行。

一般function的前面会有一个地址的限制。例如[地址] function,表示我们的动作要操作的行。下面我们通过具体的离职直观的看看sed的使用方法。

// test.txt  内容如下

11 aa

22 bb

33 cc

44 dd

55 2e

删除行(不替换文件,只是打印到控制台上面)

sed '1,2d' test.txt  表示删除第1行到第2行的内容。

sed '1,$d' test.txt  表示删除第1行到最后一行的内容。

sed '/2/d' test.txt  表示删除包含2的所有行。

sed '/^2/d' text.txt  表示删除以2开头的所有行。

新增行(不替换文件,只是打印到控制台上面)

sed '1a hello world' text.txt  表示在第1行的后面添加一行,添加的内容就是"hello world"。

sed '1i hello world' text.txt  表示在第1一行的前面添加一行,添加的内容是"hello world"。

替换行(不替换文件,只是打印到控制台上面)

sed '1c hello world' text.txt  表示将第1行的内容替换为"hello world"。

sed '/^2/c hello world' text.txt  表示将以2开头的行全部替换为"hello world"。

替换部分字符串而不是整行(不替换文件,只是打印到控制台上面)

sed中除了上面的命令是针对证行进行操作的之外,还提供一个替换明明,该命令对某一行中的部分字符串进行操作,下面举一个简单的例子,还是同样的文本内容,执行下面的命令:

sed 's/aa/AA/' text.txt  表示将文件中的aa替换为AA。s/待替换的字符串/新字符串/。这里只置换每一行遇到的第一个aa。

sed 's/aa/AA/g' text.txt  表示将文件中的aa替换为AA,加入g选项之后,表示为全局替换。

sed '1s/aa/AA/g' text.txt  表示将文件中的第1行的aa进行替换。

sed '5,$s/aa/AA/g' text.txt  表示将文件中第5行到末尾进行替换。

sed '/^[0-9]/s/aa/AA/g' text.txt  表示将文件中以数字开头的行进行替换操作。

搜索并输出行内容(不替换文件,只是打印到控制台上面)

sed -n '2p' text.txt  表示输出第2行。

将修改应用到文件中(替换文件)

上面举的例子都没有修改文件里面的内容,只是将修改结果打印到控制台上面,而文件是没有修改的。

我们可以使用-i选项告诉sed直接修改文件的内容,而不是将修改结果输出到控制台上面。

sed -i '2d' text.txt  结果之前文件中的第二行没有了

sed正则中的元字符

我们知道sed中的命令前面可以使用地址范围进行限制,表示对文件的某些符合条件的行执行相应的操作,其中我们可以使用正则表达式选出想要操作的行,而sed中的正则语法可能与其他命令的正则语法有一些不同,这里面我们列出来sed中常用的正则。

$ 表示行尾

^ 表示行首

[a-z0-9] 表示字符范围

[^]表示出了字符集中的字符以外的字符

sed 的正则中\(\)和{\m,n\}需要转义

. 表示任意字符

* 表示零个或者多个

\+ 一次或者多次

\? 零次或者一次

\| 表示或语法

posted on 2019-01-16 10:32  帅过驴的袋鼠  阅读(216)  评论(0编辑  收藏  举报