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 工作日常用法总结