QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 13355|回复: 4

sed使用详细总结!(来源:论坛资料)

[复制链接]
发表于 2005-5-13 22:37:38 | 显示全部楼层 |阅读模式
 楼主| 发表于 2005-5-13 23:10:43 | 显示全部楼层
sed精简总结:
1,什么是sed?
sed-------->Stream EDitor

2,sed工作方式(工作原理):
sed 实用工具按顺序逐行将文件读入到内存中。然后,它执行为该行指定的所有操作,并在完成请求的修改之后将该行放回到内存中,以将其转储至终端。完成了这一行上的所有操作之后,它读取文件的下一行,然后重复该过程直到它完成该文件。如同前面所提到的,默认输出是将每一行的内容输出到屏幕上。在这里,开始涉及到两个重要的因素—首先,输出可以被重定向到另一文件中,以保存变化;第二,源文件(默认地)保持不被修改。sed 默认读取整个文件并对其中的每一行进行修改。不过,可以按需要将操作限制在指定的行上。

3,sed命令使用基本格式:
[code:1] sed [options] '{command}' [filename][/code:1]
两种方式:[code:1]
sed [-n] [-e] 'command' file(s)
sed [-n] -f scriptfile file(s)
[/code:1]
sed选项解释:[code:1]s e d选项如下:
-n 不打印;s e d不写编辑行到标准输出,缺省为打印所有行(编辑和未编辑)。p命令可以用来打印编辑行。
-f 如果正在调用s e d脚本文件,使用此选项。此选项通知s e d一个脚本文件支持所有的s e d命令,例如:sed -f myscript.sed input_file,这里m y s c r i p t . s e d即为支持s e d命令的文件。
-c 下一命令是编辑命令。使用多项编辑时加入此选项。如果只用到一条s e d命令,此选项无用,但指定它也没有关系。
-i 编辑原文件(此选项慎用,如果使用则原文件就会被修改,无法恢复)。 [/code:1]

4,sed基础用法
使用sed在文件中查询文本的方式:
sed浏览输入文件时,缺省从第一行开始,有两种方式定位文本:
a. 使用行号,可以是一个简单数字,或是一个行号范围。
b. 使用正则表达式。


5,基本sed编辑命令
[code:1]p 打印匹配行
= 显示文件行号
a\ 在定位行号后附加新文本信息
i\ 在定位行号后插入新文本信息
d 删除定位行
c\ 用新文本替换定位文本
s 使用替换模式替换相应模式
r 从另一个文件中读文本
w 写文本到一个文件
q 第一个模式匹配完成后推出或立即推出
l 显示与八进制A S C I I代码等价的控制字符
{ } 在定位行执行的命令组
n 从另一个文件中读文本下一行,并附加在下一行
g 将模式2粘贴到/pattern n/
y 传送字符
n 延续到下一输入行;允许跨行的模式匹配语句
[/code:1]

6,正则表达式匹配格式:
★ 在匹配行后面增加文本 [/pattern/]a\ 或者 [address]a\
★ 删除匹配行 [/pattern/]d 或者 [address1][,address2]d
★ 替换(修改)匹配行 [/pattern/]c\ 或者 [address1][,address2]c\
★ 在匹配行前面插入文本 [/pattern/]i\ 或者 [address]i\
★ 替换匹配串(注意不再是匹配行) [addr1][,addr2]s/old/new/g
★ 指定输出文件 [address1][,address2]w outputfile
★ 指定输入文件 [address]r inputfile
★ 替换相应字符 [address1][,address2]y/old/new/
★ 限定范围后的模式匹配 /pattern1/,/pattern2/   #匹配从pattern1到pattern2的内容
★ 指定替换每一行中匹配的第几次出现 s/oldpattern/newpattern/n  #把每行的oldpattern字符串的第n次出现替换成newpattern
★ &代表最后匹配
★ !号的使用 ----- 非


7,sed高级用法
a,sed中可以直接表示回车(换行)
[code:1]sed -e 's/ /\
>/g' file[/code:1]把file中所有空格替换为回车(换行),增加新的一个空行!

b,sed分隔符变换(避免产生歧义)
如果在匹配时有/,则为避免与匹配格式中的/重复可自己指定分隔符:
[code:1]echo $PWD|sed -e 's:/:@:g' [/code:1]

c,sed中的域
[/]表示/失去特殊意义
\/同样表示/失去意义
\1表示子匹配的第一次出现
\2表示子匹配的第二次出现
\(.*\)表示子匹配
例:
如何理解sed -e 's/^\([a-zA-Z]\+\) \([a-zA-Z]\+\)\(.*\)/\2 \1\3/g' file?

解答参考:
首先
加号表示至少匹配一次。

\?等表示引用前面的第?个匹配.

其次
意思如下:
在文件每一行的开始,如果在第一个空格之前只含有英文字符,那么与空格之后的以英文字符开头截止到最后一个英文字符的字符串进行对换,例如
First Second1234....
变为Second First1234....

后面的数字为替代符,顺序代表前面那三个括号里的表达式,1就是第一个括号里的内容,以此类推,那么原有顺序\1 \2\3就被替换为\2 \1\3,所以就是一二表达式替换而已
回复

使用道具 举报

发表于 2005-7-19 11:44:40 | 显示全部楼层
up
回复

使用道具 举报

发表于 2005-11-28 16:55:28 | 显示全部楼层
感觉先要把正则表达式搞定
回复

使用道具 举报

发表于 2006-8-14 19:15:49 | 显示全部楼层
学习了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-3-29 23:53 , Processed in 0.398508 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表