免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1012 | 回复: 0
打印 上一主题 下一主题

sed用法 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-07-07 00:17 |只看该作者 |倒序浏览

                               
sed用法
Sed 命令列可分成编辑指令与文件名称部份。
其中 编辑指令负责控制所有的编辑工作 ; 文件名称表示所处理的档案。
sed 的编辑指令均由位址(address)与函数(function)两部份组成 , 其中 , 在执行时 , sed 利用它的位址参数来决定编辑的对象;而用它的函数(参数)来进行编辑。
此外 , sed 编辑指令
, 除了可在命令列上执行还可在文件内执行。其中两者差别只是在命令列上执行时 , 其前必须加上选项 -e ; 而在文件内时只需在其档名前加上选项 -f。
另外 , sed 执行编辑指令是依照它们在命令列上或文件内的次序。
1、执行命令列上的编辑指令
当编辑指令(参照[section
2.2])在命令列上执行时 , 其前必须加上选项 -e 。
其命令格式如下 :
sed -e '编辑指令1' -e '编辑指令2' ... 文件
其中 , 所有编辑指令都紧接在选项 -e 之後 , 并置於两个 "'" 特殊字元间。另外 , 命令上编辑指令的执行是由左而右。
一般编辑指令不多时 , 使用者通常直接在命令上执行它们。
例如 , 删除
yel.dat 内 1 至 10 行资料 , 并将其馀文字中"yellow" 字串改成 "black" 字串。此时 , 可将编辑指令直接在命令上执行 , 其命令如下 :
sed -e '1,10d' -e 's/yellow/black/g' yel.dat
在命令中 , 编辑指令 '1,10d'执行删除 1 至 10 行资料 ; 编辑指令 's/yellow/black/g' ,"yellow" 字串替换(substuite)"black"
字串。   
2 sed 的编辑指令
sed 编辑指令的格式如下 :
[address1[,address2]]function[argument]
其中:            
位址参数 address1 、address2 为行数或 regular expression 字串 , 示所执行编辑的资料行 ;
函数参数 function[argument] 为 sed 的内定函数 , 表示执行的编辑动作。
下面两小节 , 将仔细介绍位址参数的表示法与有哪些函数参数供选择。
2.1 位址(address)参数的表示法
实际上 , 位址参数表示法只是将要编辑的资料行
用它们的行数或其中的字串来代替表示它们。
下面举几个例子说明(指令都以函数参数 d为例) :
删除档内第 10 行资料 , 则指令为 10d。
删除含有
\"man\" 字串的资料行时 , 则指令为 /man/d。
删除档内第 10 行到第 200 行资料, 则指令为
10,200d。
删除档内第 10 行到含 \"man\" 字串的资料行 , 则指令为 10,/man/d。
接下来 , 以位址参数的内容与其个数两点 , 完整说明指令中位址参数的表示法。
位址参数的内容:
位址为十进位数字 : 此数字表示行数。当指令执行时 , 将对符合此行数的资料执行函数参数指示的编辑动作。
例如 删除资料档中的第 15 行资料 , 则指令为 15d。其馀类推 ,如删除资料档中的第
m 行资料 , 则
指令为 md 。
位址为 regular
expression
当资料行中有符合 regular expression 所表示的字串时 , 则执行函数参数指示的编辑动作。另外 , 在regular expression 前後必须加上 "/"。例如指令为 /t.*t/d , 表示删除所有含两 "t" 字母的资料行。其中 , "."表示任意字元; "*" 表示其前字元可重任意次 , 它们结合 ".*" 表示两 "t" 字母间的任意字串。
位址参数的个数, 在指令中 ,
当没有位址参数时 , 表示全部资料行执行函数参数所指示的编辑动作;
当只有一位址参数时 , 表示只有符合位址的资料行才编辑 ;
当有两个位址参数 , 如 address1,address2 时 , 表示对资料区执行编辑 , address1 代表起始资料行 , address2 代表结束资料行。
例如指令为
d  其表示删除档内所有资料行。
例如指令为
5d  其表示删除档内第五行资料。
例如指令为
1,/apple/d  其表示删除资料区 , 由档内第一行至内有 \"apple\" 字串的资料行。
例如指令为/apple/,/orange/d
其表示删除资料区 , 由档内含有 "apple"
字串至含有 "orange" 字串的资料行
2.2 有那些函数(function)参数
下页表中介绍所有 sed 的函数参数的功能。
函数参数 功能
:label   建立 script
file 内指令互相参考的位置。
#        建立解
{ }      集合有相同位址参数的指令。
!        不执行函数参数。
=       印出资料行数( line
number )。
a       添加使用者输入的资料。
b label 将执行的指令跳至由 : 建立的参考位置。
c       以使用者输入的资料取代资料。
d       删除资料。
D       删除 pattern space 内第一个 newline 字母前的资料。
g       拷贝资料从
hold space。
G       添加资料从
hold space 至 pattern space 。
h       拷贝资料从
pattern space 至 hold space 。
H       添加资料从
pattern space 至 hold space 。
l       印出 l 资料中的 nonprinting character 用 ASCII 码。
i       插入添加使用者输入的资料行。
n       读入下一笔资料。
N       添加下一笔资料到
pattern space。
p       印出资料。
P       印出
pattern space 内第一个 newline 字母 前的资料。
q       跳出 sed 编辑。
r       读入它档内容。
s       替换字串。
t label 先执行一替换的编辑指令 , 如果替换成牛p>则将编辑指令跳至 : label 处执行。
w       写资料到它档内。
x       交换 hold space 与 pattern space 内容。
y       转换(transform)字元。
虽然 , sed 只有上表所述几个拥有基本编辑功能的函数 , 但由指令中位址参数和指令与指令间的配合 , 也能使sed 完成大部份的编辑任务。
2.3 执行文件内的编辑指令
当执行的指令太多 , 在命令列上撰写起来十分混乱 , 此时 , 可将这些指令整理储存在档案(譬如档名为 script_file )内 , 用选项 -f script_file , 则让 sed 执行 script_file 内的编辑指令。其命令的格示如下 :
sed -f script_file 文件档
其中 , 执行 script_file 内编辑指令的顺序是由上而下。例如上一节的例子 , 其可改成如下命令:
sed -f ysb.scr yel.dat
其中 , ysb.scr 档的内容如下 :
1,10d
s/yellow/black/g
另外 , 在命令列上可混合使用选项 -e 与 -f , sed 执行指令顺序依然是由命令列的左到右, 如执行至 -f 後档案内的指令 , 则由上而下执行。

2.4 执行多个文件档的编辑

在 sed 命令列上 , 一次可执行编辑多个文件档 , 它们跟在编辑指令之後。
例如 , 替换white.dat、red.dat、black.dat 档内的 \"yellow\" 字串成 \"blue\"
, 其命令如下:
sed -e 's/yellow/blue/g' white.dat red.dat black.dat
上述命令执行时 , sed 依 white.dat、red.dat、black.dat 顺序
, 执行编辑指令 s/yellow/blue/进行字串的替换。
2.5.执行输出的控制
在命令列上的选项 -n 表示输出由编辑指令控制。由前章内容得知 , sed 会 "自动的"
将资料由pattern space 输送到标准输出档。但藉着选项 -n , 可将 sed 这 "自动的" 的动作改成 "被动的" 由它所执行的编辑指令(解[8])来决定结果是否输出。
由上述可知 , 选项 -n 必须与编辑指令一起配合 , 否则无法获得结果。例如 , 印出 white.dat 档内含有
\"white\"字串的资料行 , 其命令如下:
sed -n -e \'/white/p\'
white.dat
上面命令中 , 选项 -n 与编辑指令 /white/p (参照[section4.6]) 一起配合控制输出。其中 , 选项 -n 将输出控制权移给编辑指令;/white/p 将资料行中含有 \"white\" 字串印出萤幕。

               
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/23653/showart_335646.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP