笔记:sed(一) 不指定

root , 2007/08/21 21:56 , SHELL , 评论(0) , 阅读(5881) , Via 本站原创 | |
sed是一个非交互性文本流编辑器,是一种重要的文本过滤工具。

调用(三种方式)
1.使用sed命令行
sed [选项] sed命令 输入文件
2.使用sed脚本文件
sed [选项] -f sed脚本文件 输入文件
3.将sed命令插入脚本文件,并使sed脚本可执行。

使用sed在文件种查询文本的方式
sed浏览输入文件时,缺省从第一行开始,有两种方式定位文本
1)使用行号(可以是数字,和是行号范围)
2)使用正规表达式
sed在文件种定义文本的格式
x                                  x为一行号
x,y                               取值范围从x到y
/pattern/                      查询包含模式的行
/pattern/pattern/         查询包含两个模式的行
pattern/,x                    在给定行号上查询包含模式的行
x,/pattern                    通过行号和模式查询匹配行
x,y!                              查询不包含指定行号x和y的行

基本sed编辑命令
p                                 打印匹配行
=                                 显示文件行
a\                                在指定行号后附加新的文本信息
i\                                 在指定行号后插入新的文本信息
d                                 删除指定行
c\                                用新的文本替换定位文本
s                                 使用替换模式替换相应的模式
r                                  从另一个文件种读文本
w                                 把文本写到一个文件
q                                  第一个匹配行完成后退出或立即退出
l                                   显示八进制ASCII代码等价的控制字符
{}                                 在定位执行的命令组
n                                  从另一个文件种读文本下一行,并附加在下一行
g                                  将模式粘贴到/pattern n/
y                                  传送字符

使用p(print)显示行
sed -n '2p' /etc/passwd                         #-n 显示打印定位匹配行
sed -n '1,3p' /etc/passwd

打印模式
sed -n '/root/'p /etc/passwd

使用模式和行号进行查询
sed -n '/dev/'p /etc/fstab
sed -n '6,/dev/'p /etc/fstab

匹配元素字符
sed -n '/\#/'p /etc/fstab

显示整个文件
只需将行的范围设为第一行到最后一行 (1,$)
sed -n '1.$p' /etc/fstab

首行 '1p'

最后一行'$p"

任意字符
sed -n '/.*ing/'p /etc/passwd

打印行号(=)
sed -e '/reiserfs/=' /etc/fstab
sed -e = /etc/fstab
sed -n '/reiserfs/=' /etc/fstab
sed -n = /etc/fstab
如果只打印行号以及匹配行,必须使用两个sed命令,并使用-e选项
sed -n -e '/reiserfs/p' -e '/reiserfs/=' /etc/fstab

附加文本 (a)
#!/bin/sed -f
/reiserfs/ a\
then siddnly it happend

插入文本 (i)
#!/bin/sed -f
4 i\
utter confusion folloewed

修改文本 (c)
#!/bin/sed -f
/reiserfs/ c\
this line is changed

#!/bin/sed -f
3 c\
this line is changed

#!/bin/sed -f
1 c\
the dibble *****
/reisefs/ i\
****************
$ c\
***
删除文本
格式
[address [,address]]d
sed '1d' /etc/fstab
sed '1,3d' /etc/fstab
sed '$d' /etc/fstab

替换文本
格式
[address [,address]] s /pattern-tofind/replacement-pattern/ [g p w n]
替换选项
g                    全局替换
n                    将所有替换值写入标准输出(缺省)
p                    是-n无效
w                    使输出定向到一个文件

sed 's/reiserfs/REISERFS/' /etc/fstab
sed 's/\///g' /etc/fstab               #删除/号

在符合条件的行前面添加一个#字符,起到注释的作用。
sed -i '/^adm/ s/^/#/g' /tmp/list.h
Tags:
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]