sed 工作日常用法总结

Shell 1329℃

sed(Stream Editor)文本流编辑,是一个非交互式的面向字符流的编辑器。能同时处理多个文件多行的内容,可以把只匹配到模式的内容输入到屏幕上,还可以对原文件改动但不输入屏幕上。sed命令是利用script来来处理、编辑文本文件。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。

语法格式

sed [-hnVi][-e<script>][-f<script文件>][文本文件]

参数说明:

  • -h或–help 显示帮助。
  • -n或–quiet或–silent 仅显示script处理后的结果。
  • -V或–version 显示版本信息。
  • -i或–in-place 直接修改文件内容。
  • -e<script>或–expression=<script> 以选项中指定的script来处理输入的文本文件。
  • -f<script文件>或–file=<script文件> 以选项中指定的script文件来处理输入的文本文件。

动作说明:

  • a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)
  • c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行
  • d :删除,因为是删除所以 d 后面通常不接任何东西
  • i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行)
  • p :打印,即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行
  • s :取代,替换指定字符。通常 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g

在第四行后添加一行

sed -e 4a\newLine testfile

以行为单位的新增/删除

将第 2~5 行删除

nl /etc/passwd | sed '2,5d'
#注意,默认 -e 可以省略。还有sed 后面接的动作,务必以两个单引号括住!

只要删除第 2 行

nl /etc/passwd | sed '2d'

删除第 3 到最后一行

nl /etc/passwd | sed '3,$d'

在第2行后新增一行

nl /etc/passwd | sed '2a new line'

在第2行前新增一行

nl /etc/passwd | sed '2i new line'

在第2行后新增两行

[root@www ~]# nl /etc/passwd | sed '2a line1\
> line2'
#注意,行之间都必须使用反斜杠\。

以行为单位的替换与显示

将2-5行替换

nl /etc/passwd | sed '2,5c new line'

仅列出第 5-7 行

nl /etc/passwd | sed -n '5,7p'

文本搜索

搜索root关键字的行

nl /etc/passwd | sed '/root/p'
#会输出所有行,同时把匹配行再打印多一遍。

只打印匹配的行

nl /etc/passwd | sed -n '/root/p'

删除匹配的行,其他行输出

nl /etc/passwd | sed  '/root/d'

数据的搜寻并执行命令

nl /etc/passwd | sed -n '/bash/{s/bash/blueshell/;p;q}'    
#搜索root对应的行,执行花括号中的一组命令,每个命令之间用分号分隔,这里是把bash替换为blueshell,p是输出这行,q是退出。

数据的搜寻并替换

#sed 的搜寻与替代的与 vi 类似:
sed 's/要被取代的字串/新的字串/g'
/sbin/ifconfig eth0 | grep 'inet addr' | sed 's/^.*addr://g' | sed 's/Bcast.*$//g'
#将 IP 前面的部分替换成空,再将后面的部分替换成空

多点编辑

nl /etc/passwd | sed -e '3,$d' -e 's/bash/blueshell/'
#-e表示多点编辑,第一个编辑命令删除第三行到末尾,第二条命令搜索替换

直接修改文件内容

sed 可以直接修改文件的内容,不必使用管道命令或数据流重定向,工作中使用前记得先备份原文件。

sed -i '$a last' test.txt
# $ 代表的是最后一行,而 a 的动作是新增

转载请注明:零五宝典 » sed 工作日常用法总结