linux sed 命令

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

首先谈一下sed经常使用的经常使用格式为:sed[选项] [动做]编辑器

经常使用选项:spa

  -n:使用安静(silent)模式。在通常sed的用法中,全部崽子STDIN的数据通常都会会被列出到终端上。但若是加上-n参数后,则只有通过sed特殊处理的那一行(或者动做)才会被列出来。字符串

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

  -f:直接将sed的动做写在一个文件内,-f filename则能够运行filename内的sed动做。function

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

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

functionfile

  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\}须要转义

. 表示任意字符

* 表示零个或者多个

\+ 一次或者屡次

\? 零次或者一次

\| 表示或语法

相关文章
相关标签/搜索