03-Sed基础语法及例子
1 Sed语法及举例
在实际使用sed过程中经常使用字符串的替换、删除、查找等操作。Linux中的编辑器Vi、GVIM、emacs等都可以进行上述操作,但是大量进行操作的时候,效率很低。
地址参数 {
命令参数1
命令参数2
...
}
**对于符合地址参数的数据,依次执行命令参数1,命令参数2**
1.1 替换文件中的数据
- 表示字符串替换的参数为s;
- 表示替换数据行、数据区的参数为c
- \表示换行
例1
将文件中含有machine字符串的数据行中的phi替换为beta字符串
# /machine/ -- 匹配所有machine所在行
# s -- 表示替换
sed -e '/machine/s/phi/beta/g' input.dat
例2
将文件中第5行数据替换为句子 Those who in quarrels interpose,mnust often wipea blood nose.
sed -e '5c \
Those who in quarrels interpose,mnust often wipea blood nose.'
input.dat
例3
将文件中的1-100行替换为下面两行
# 替换内容
How are you?
data be deleted
sed -e '1,100c \
How are you? \
data be deleted !
' input.dat
1.2 移动文件中的数据
sed中的hold space可以暂存编辑中的数据,用函数参数w将文件数据搬动到文件内存储,或者使用函数参数r将文档中的内容搬到文件内。
Hold space是sed用来暂存pattern space内数据的缓存器,当sed执行函数参数h,H时会将pattern space中的资料暂存到hold space;执行函数参数x,g,G时会将暂存的资料取到pattern space。
例1
将文件中前100数据,搬到文件第300行之后。
sed -f mov.scr input.dat
# scr中的内容
1,100 {
H
d
}
300G
其中
1,100{
H
d
}
表示先将前100行的数据,先存储到hold space(H),然后将pattern space中的内容进行删除。
300G
300G表示,将hold space中的内容,添加到pattern space(G)的第300行输出
例2
将文件中含有phi字符串的行,搬运至mach.inf文件中存储。
# w 表示将文档搬运到另一个文档进行存储
sed -e '/phi/w mach.inf' file
例3
将mach.inf文档中的内容,搬至文件中含beta字符串的数据行
# r 表示将一个文件搬运到另一个文件
sed -e '/beta/r mach.inf' file
1.3 删除文件中的数据
使用函数参数d 或者是 D可以进行删除
例1
删除文档中所有的空白行
# N 表示将空白行的下一行资料添加至pattern space
# /^$/D 表示删除空白行
sed -e '/^$/{
N
/^$/D
}' 文档
1.4 查找文件中的数据
sed -f gp.scr file
/omega/b
N
h
s/.*\n/
/omega/b
g
D