1.简介  

   sed命令不会修改文件的内容,除非使用shell的I/O重定向,默认所有的输出行都输出到标准输出中。


2.过滤(定址)

  可以使用过滤条件确定需要编辑的行,数字、正则、前两者结合,如果没有过滤,则默认输出所有行。

   a.地址是一个数字则表示行号,是"$"符号则表示最后一行:

$sed -n '3p' a.txt

          只输出第三行

    b.可以指定行号范围:

$sed '100,200p' a.txt

      输出第100行到第200行


     c.地址是以","分割,可以是数字、正则、两者结合的表达式

       

#删除第2到第5行
sed '2,5d' a.txt
#删除包含"john"的行到第10行
sed '/john/,10d' a.txt
#删除包含"john"的行到包含"lili"的行
sed '/john/,/lili/' a.txt

3.命令与选项

  a\命令:在当前行后添加一行或多行,多行时除最后一行需要用\续行

 

#在文件learn.txt中的含有cat的行后插入内容为aaa、bbb的两行
sed '/cat/a\ aaa\ bbb' learn.txt

 

  c\命令:用该命令后的新文本替换当前行的文本。多行时除最后一行要用\续行

   

#用aaa bbb替换含有cat的行
sed '/cat/c\ aaa\ bbb' learn.txt

 

  i\命令:在当前行之前插入新文本,新文本为多行时除最后一行需要用\续行

 

#在含有cat的行之前插入aaaa bbbb
sed '/cat/i\ aaaa\ bbbb' learn.txt

 

   d命令:删除行

                 

#删除最后一行
sed '$d' learn.txt
#删除含有cat的行
sed '/cat/d' learn.txt

   

   p命令:显示内容

     

#默认打印所有行,并将含有cat的行另外打印一遍
sed '/cat/p' learn.txt
#加入-n后取消默认打印,p命令只把含有cat的行打印一遍
sed -n '/cat/p' learn.txt


   s命令:文本替换

   

#在含有cat的行中将所有cat替换为dog
sed 's/cat/dog/g' learn.txt