ITPub博客

首页 > Linux操作系统 > Linux操作系统 > Linux:shell脚本sed

Linux:shell脚本sed

原创 Linux操作系统 作者:果果的空间 时间:2013-08-14 17:53:47 0 删除 编辑
流编辑器 -  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命令的文本文件
  • 执行命令列上的编辑指令
  1. sed编辑指令
  2. 执行档案内的编辑指令
  3. 执行多个档案的编辑
  4. 执行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),回到上一页


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29056818/viewspace-768526/,如需转载,请注明出处,否则将追究法律责任。

下一篇: Linux:shell脚本awk
请登录后发表评论 登录
全部评论

注册时间:2013-07-18

  • 博文量
    60
  • 访问量
    115005