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\}须要转义
. 表示任意字符
* 表示零个或者多个
\+ 一次或者屡次
\? 零次或者一次
\| 表示或语法