流编辑器 - stream editor
-
sed 编辑器是linux系统管理员的工具包中最有用的资产之一
-
sed 非常适于脚本中使用,因为不需要进行交互
-
流编辑器非常适合于执行重复的编辑,比如低缓文件中词语等
使用sed写到shell脚本中
-e 表示执行某一个命令 s 为替换, d 为删除, p为打印
-n 默认不输出, 如果加p,表示只输出加p的文本 sed -n -e 's/root/weixl/g' /etc/passwd
\< 以单词的开头
\> 以单词的结尾
sed -e 's/root/xl/g' /etc/passwd
替换root为xl,但/etc/passwd文件没有改变,因为只是显示出来
sed -e 's/root/xl/g' /etc/passwd > /tmp/a
cp /tmp/a /etc/passwd
sed -n -e '/\/p' /etc/passwd 打印以weixl单词开头的行
sed -n -e '/\/s/bash/nologin/p' /etc/passwd 打印以xl单词开头的行,并将bash替换为nologin
vi /etc/squid/squid.conf
sed -e '/^#/d' /etc/squid/squid.conf 以#开头的行不要显示,d为删除
sed -e '/^#/d' -e '/^$/' /etc/squid/squid.conf, 以#开头的行和空行不要显示,d为删除
wc -l !$(!$是指上一个命令,如/etc/squid/squid.conf)
sed -e '/^#/d' -e '/^$/' /etc/squid/squid.conf | wc -l
使用sed进行替换
sed 's/{old value}/{new value}'
多次替换
sed -e 's/mike/todd/' -e 's/root/xl'
sed -e 's/tiger/wolf/;s/after/before/'
echo "The tiger cubs will meet on Tuesday after school" | sed 's/tiger/wolf/;s/after/before' 两次替换
注意:如果输入是源自之前的命令输出,则不需要指定文件名,同样的原则也使用于awk, sort 和其它大多数linux/UNIX 命令使用工具程序。
多次修改的方法
1.使用“-e”选项, 它通知程序使用了多条编辑命令
echo "The tiger cubs will meet on Tuesday after school" | sed -e 's/tiger/wolf/' -e 's/after/before'
2.使用";"分号来分隔,注意分号必须是紧跟斜线的下一个字符,如果两者之间有一个空格,操作将不能成功完成,并返回一条错误信息;
echo "The tiger cubs will meet on Tuesday after school" | sed 's/tiger/wolf
/;s/after/before'
3.两个(‘’)撇号之间的全部内容都被解释为sed命令
echo "The tiger cubs will meet on Tuesday after school" | sed 's/tiger/wolf/;
s/after/before'
$The wolf cubs will meet on Tuesday before school
sed命令列可分成编辑指令和文件档部分。
1.编辑指令负责控制所有的编辑工作,sed编辑指令有位址(address)与函数(function)两部分组成,其中,在执行时,sed利用它的位址参数来决定编辑的对象;而用它的函数进行编辑.
地址是sed用来定义编辑域的,如果没有特定的地址,sed会编辑整个文件.如果给出一个地址,sed编辑所有匹配这个地址的行.如果给出两个地址,sed会编辑他们自己的行.
地址可以是下面的格式
number 匹配指定的行号
first~step first指定开始行,step指定到下一个编辑行的步长,如1~2, sed就会从第一行开始,然后编辑之后的每第二行,也就是说编辑所有的奇数行.
/regexp/ 匹配所有与正则表达式匹配的行
2. 文件档表示所处理的档案
了解sed脚本
-
编辑内容可以写成脚本
-
脚本是包含sed命令的文本文件
-
执行命令列上的编辑指令
-
sed编辑指令
-
执行档案内的编辑指令
-
执行多个档案的编辑
-
执行sed输出控制
一个sed脚本就是包含编辑命令的文本文件,用-f 可使sed使用一个脚本,指定一个脚本文件
如: vi sss
s/root/weixl/
s/bash/nologin/
保存后,执行sed -f /etc/passwd(我没有执行成功),只能执行 sed -f sss /etc/passwd就可以成功
如: vi sss
#!/bin/sed -f
s/root/xl/
s/bash/nologin/
保存后, chmod a+x sss
执行 ./sss /etc/passwd
sed -e '1,10d' -e 's/yellow/black/g' sss 编辑指令'1,10d'执行删除1至10行资料
查看sed的功能 , 可以使用 man sed 或 info sed来进行查看, info sed 有*的地方 可以按enter进入例子,查看如何使用此参数, shift+u(U),回到上一页