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
调用(三种方式)
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