一、Sed编辑器介绍
Sed编辑器又被称为流编辑器,流编辑器会在编辑器处理数据之前基于预先提供的一组规则来编辑数据流。
sed编辑器可以根据命令来处理数据流中的数据,这些命令要么从命令行输入,要么存储在一个命令文本中。
二、sed的工作流程
1、读取:sed 从输入流中读取一行内容并存储到临时缓冲区中。
2、执行:默认情况下,所有sed 命令都在模式空间中顺序的执行。
3、显示:发送修改后的内容到输出流
三、sed命令格式
1、sed -e ‘操作’ 文件1 文件2 …
2、sed -f 脚本文件 文件1 文件2 …
3、sed -n -e ‘操作’ 文件1 文件2 …
4、sed -i -e ‘操作’ 文件1 文件2 …
5、sed -e 'n{
操作1
操作2
…
}‘ 文件1 文件2 …**
常用选项:
-e:表示用指定命令来处理输入的文本文件,只有一个操作命令时可省略。
-f:表示用指定的脚本文件来处理输入的文本文件。
-h:获取帮助
-n:禁止sed编辑器输出,可以与p一起完成输出。
-i:直接修改目标文本文件
常用操作:
s:替换
d:删除
a:增加,在当前行下面增加
i:插入,在选定行上面插入
c:替换
y:字符转换
p:打印
=:打印行号
l(小写):打印数据流中的文本和不可打印的ASCII字符。
[root@localhost /etc/test3#] sed -n 'p' demo1.txt
[root@localhost /etc/test3#] sed -e '=' demo1.txt
sed编辑器有两种寻址方式:
1、以数字形式表示行区间
2、用文本模式来过滤出行
[root@localhost /etc/test3#] sed -n '3p' demo1.txt
[root@localhost /etc/test3#] sed -n -e '1,4p' demo1.txt
[root@localhost /etc/test3#] sed -n -e '1,+4p' demo1.txt
[root@localhost /etc/test3#] sed -n -e 'p;n' demo1.txt
[root@localhost /etc/test3#] sed -n -e 'n;p' demo1.txt
[root@localhost /etc/test3#]sed -n -e '1n;5n;3n;p' demo1.txt
[root@localhost /etc/test3#]sed -n '/user/p' /etc/passwd
[root@localhost /etc/test3#] sed -n '2,/nobody/p' /etc/passwd
[root@localhost /etc/test3#] sed -nr '/ro{1,}t/p' /etc/passwd
删除行
[root@localhost /etc/test3#] sed '3d' demo1.txt
[root@localhost /etc/test3#] sed '/^$/d' demo1.txt
[root@localhost /etc/test3#] sed '/nologin$/d' /etc/passwd
[root@localhost /etc/test3#] sed '/1/,/3/d' demo2.txt
替换
命令格式
行范围 s/旧字符串/新字符串/替换标记
共有4种替换标记:
1、数字:表明新字符串将替换第几处匹配的地方
g:标名新字符串将会替换所有匹配的地方
p:打印与替换命令匹配的行,与 -n 一起使用
w 文件:将替换的结果输出到文件中
[root@localhost /etc/test3#] sed -n 's/root/admin/p' /etc/passwd
[root@localhost /etc/test3#] sed -n 's/root/admin/gp' /etc/passwd
[root@localhost /etc/test3#]sed -n 's/root//gp' /etc/passwd
[root@localhost /etc/test3#] sed -n '1,10s/^/#/p' /etc/passwd
[root@localhost /etc/test3#] sed -n '/^root/ s/$/#/p' /etc/passwd
[root@localhost /etc/test3#] sed -f script.sed /etc/passwd
[root@localhost /etc/test3#] sed -n '1,10s/^/#/pw out.txt' /etc/passwd
sed -i ‘s9\945\9\99\98\939g’ test.txt
##这句话的意思就是将 94599替换成9893
s 后面跟的字符就是替换符,我们一般用的都是 / ,其实s 后面什么都可以跟,跟什么什么就是替换符,上面s 后面跟的是9,所有9 就成了替换符,后面如果使用到相同字符9的话,就需要 \ 来转义,否则系统会认为9 就是替换符,简单来说,你就可以把9 想象成 /。
插入
[root@localhost /etc/test3#] sed '/3/c A' demo2.txt
[root@localhost /etc/test3#] sed '/3/ y/3/A/' demo2.txt
[root@localhost /etc/test3#] sed '3a 0000' demo2.txt
[root@localhost /etc/test3#] sed '1,3i 0000' demo2.txt
[root@localhost /etc/test3#] sed '/root/{H;d};$G' /etc/passwd
[root@localhost /etc/test3#] sed '1,2H;3,4G' demo2.txt
[root@localhost /etc/test3#] echo 111222333 | sed -r 's/(111)(222)/\2\1/'