一. Sed语法:
sed 'command' filenames
二. sed简介
Sed是非交互式的行编辑器. 它即可以从stdin中接收文本输入, 也可以从文件中接收文本输入, 它对输入中的指定行进行特定的操作, 一行操作一次, 然后将结果输出到stdout,
或输出到文件中. 在shell脚本中使用的话, sed通常都是作为管道工具链中的一个处理部分来使用.
Sed会决定它需要处理那些行, 因为sed的参数就包含有地址范围. [1] 既可以通过行号来指定地址范围, 也可以通过模式匹配来决定地址范围.
比如, 3d表示sed会删除输入的第3行, /windows/d表示sed会删除掉所有匹配"windows"的输入行.
三. 基本sed操作
操作符 | 名字 | 效果 |
---|---|---|
| 打印 | 打印[指定的地址范围] |
| 删除 | 删除[指定的地址范围] |
| 替换 | 将指定行中, 将第一个匹配到的pattern1, 替换为pattern2. |
| 替换 | 在地址范围指定的每一行中, 将第一个匹配到的pattern1, 替换为pattern2. |
| transform | 在地址范围指定的每一行中, 将pattern1中的每个匹配到pattern2的字符都使用pattern2的相应字符作替换. (等价于tr命令) |
| 全局 | 在每个匹配的输入行中, 将每个模式匹配都作相应的操作. (译者注: 不只局限于第一个匹配) |
-e |
| 允许多项编辑 |
-f |
| 指定sed脚本文件名 |
-n |
| 取消缺省输出 |
除非在替换命令的后边明确指定选项g(全局), 否则的话, 替换操作只会替换掉每行上的第一个模式匹配实例.
如果在命令行或脚本中使用这个命令, sed操作可能还需要某些选项和引用.
四. 示例
$cat file1 #file1内容
northwest NW Charles Main 3.0 .98 3 24
western WE Sharon Gray 5.3 .97 5 23
Southwest SW Lewis Dalsass 2.7 .8 2 18
Southern SO Suan Chin 5.1 .95 4 15
Southeast SE Patricia Hemenway 4.0.7 4 17
eastern EA TB Savage 4.4 .84 5 20
northeast NE AM Main Jr. 5.1 .94 3 13
north NO Margot Weber 4.5 .89 5 9
central CT Ann Stephens 5.7 .94 5 13
例1:
1. sed '1,3d' file1 #删除文件file1的1至3行
2. sed -n '/Tom/p' file1 #打印文件file1中包含Tom的行
3. sed -n '/Tom/! p' file1 #打印文件file1中不包含Tom的行
4. sed '3,$d' file1 #删除文件file1从第3行至最后一行的内容
5. sed '/Tom/d' file1 #删除文件file1中包含Tom的行
6. sed 's/Tom/Jack/g' file1 #将文件file1各行内所有的Tom都替换为Jack
7. sed -n 's/^Tom/Jack/p' file1 #将文件file1行首的Tom替换为Jack并只打印发生替换的行
8. sed -n 's/\(Mar\)got/\1ianne/p' file1 #将文件file1中的Margot替换为Marianne,并只显示发性替换的行
9. sed -n '/west/,/east/' file1 #将文件file1在west和east中的所有行打印出来
10. sed -e '1,3d' -e 's/Hemenway/Jones/' file1 #对file1先编辑,再替换
11. sed '/Susan/r file2' file1 #在文件file1中所有包含Suan的行后读入文件file2的内容
12. sed -n '/north/w file3' file1 #将file1中包含north的行写入file3
13. sed '/^north /a --->new appended line<---' file1 #将file1中以north开头的行后添加一行内容
14. sed '/eastern/i --->new insert line<---' file1 #将file1中包含eastern的行前插入一行内容
例2. sed脚本
$cat sed_sh1
s/TB \(Savage\)/Thomas \1/
$sed -f sed_sh1 file1