02-Sed语法介绍
1 Sed语法介绍
介绍Sed支持的基本命令及其命令行语法,Sed可以通过以下两种形式进行调用:
学习sed命令使用之前,需要掌握正则表达式的用法。
sed [-n] [-e] 'commands' files
sed [-n] -f script files
sed 命令列可以分为编辑指令与文件部分。其中编辑指令负责所有的编辑工作,文件表示所处理的文档。
其中,sed是用他的地址参数决定编辑对象,使用它的函数参数进行编辑。
sed 可以以命令行的方式进行执行,加-e,sed 还可以以脚本的方式进行执行,加-f
1.1 在命令行上执行sed指令
当编辑指令在命令行上进行执行的时候需要加上-e,其命令格式如下:
sed -e '编辑命令1' -e '编辑命令2' ..... files
- 所有的编辑指令都在-e之后,并且在两个''之间。
- 编辑指令的执行是从左到右的,一般在编辑指令不多的时候,往往使用命令行进行执行
例1
删除yel.dat内1-10行的数据,将其余文字中的yellow改为black
sed -e '1,10d' -e 's/yellow/black/g' yel.dat
- 1,10d--表示删除1-10行
- s--表示替换
- g--表示全部替换
- s/查找词/替换词/g
1.2 sed编辑命令
[address1 [,address2]] function[argument]
- address1,address2--表示为行数
- function--sed内置函数
1.2.1 address 参数表示方法
- 删除文件内第10行数据
sed -e '10d' test.txt
- 删除含有'man'字符串的行
sed -e '/man/d' test.txt
- 删除文档第2行到第100行数据
sed -e '2,100d' test.txt
- 删除第10行含有'man'字符串的数据行
sed -e '10,/man/d' test.txt
注意:
- 如果使用正则表达式需要在正则表达式前后加/
// 删除含有两个t字母的数据行
sed -e '/t.*t/d' test.txt
- 在没有地址参数时候,全部数据参与编辑
- 只有一个地址参数的时候,地址所在行参与编辑运算
- address1,address2--表示起始行以及结束行,在之间进行编辑
下面举几个例子进行说明:
//删除文件内所有的数据行
sed -e 'd' file
//删除第5行
sed -e '5d' file
//删除第一行到有apple字符串的一行
sed '1,/apple/d' file
//删除有apple字符串的行到有orange字符串的行
sed -e '/apple/,/orange/' file
1.2.2 常见的命令参数
命令 | 参数 |
---|---|
# | 注释 |
d | 删除数据 |
s | 替换字符串 |
p | 输出 |
1.3 执行脚本中的编辑命令
当执行的指令太多,在命令行中书写命令十分的不方便,此时可以将这些指令存储到一个脚本文件(script_file)中,用选项-f script_file进行执行。
sed -f script_file file
//书写一个脚本文件,命名为ysb.scr
//脚本内容如下
1,10d
s/yellow/black/g
//指向脚本内容
sed -f ysb.scr yel.dat
- sed执行脚本文件的时候是从上到下进行执行的
- sed可以-e与-f进行混合使用,执行原则是从左到右,从上到下
1.4 同时对多个文件进行编辑
sed可以一次编辑多个文档,他们跟在编辑指令之后
- 替换white.dat、rad.dat、black.dat文件内的yellow字符串转变为blue
sed -e 's/yellow/blue/g' white.dat red.dat black.dat
- sed 按照书写顺序依次进行执行
1.5 执行输出控制
命令中的选项-n表示输出由编辑指令进行控制,sed原本会自动进行输出,加上-n之后输出由编辑命令控制。-n需要与编辑命名进行配合使用。
比如:输出while.dat文件中含有white字符串的数行
sed -n -e '/white/p' white.dat