[shell]sed语法

来源:互联网 发布:java里解压缩gzip文件 编辑:程序博客网 时间:2024/06/05 03:17

 一. Sed语法:
sed 'command' filenames

二. sed简介
Sed是非交互式的行编辑器. 它即可以从stdin中接收文本输入, 也可以从文件中接收文本输入, 它对输入中的指定行进行特定的操作, 一行操作一次, 然后将结果输出到stdout,

或输出到文件中. 在shell脚本中使用的话, sed通常都是作为管道工具链中的一个处理部分来使用.

Sed会决定它需要处理那些行, 因为sed的参数就包含有地址范围. [1] 既可以通过行号来指定地址范围, 也可以通过模式匹配来决定地址范围.

比如, 3d表示sed会删除输入的第3行, /windows/d表示sed会删除掉所有匹配"windows"的输入行.

三. 基本sed操作

操作符

名字

效果

[地址范围]/p

打印

打印[指定的地址范围]

[地址范围]/d

删除

删除[指定的地址范围]

s/pattern1/pattern2/

替换

将指定行中, 将第一个匹配到的pattern1, 替换为pattern2.

[地址范围]/s/pattern1/pattern2/

替换

地址范围指定的每一行中, 将第一个匹配到的pattern1, 替换为pattern2.

[地址范围]/y/pattern1/pattern2/

transform

地址范围指定的每一行中, 将pattern1中的每个匹配到pattern2的字符都使用pattern2的相应字符作替换. (等价于tr命令)

g

全局

在每个匹配的输入行中, 将每个模式匹配都作相应的操作. (译者注: 不只局限于第一个匹配)

-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


原创粉丝点击