sed用来把文档或字符串里面的文字经过一系列编辑命令转换为另一种格式输出。sed通常用来匹配一个或多个正则表达式的文本进行处理

1.基本语法

1
2
3
4
sed -n -i -e 's/re/ve/p' file
-n 只打印匹配到的行,配合P打印使用;
-i 编辑源文件
-e 可以接多个命令

2.搜索命令

1
2
3
4
5
6
sed '/ad/s/re/ve/g' file #file文件全局搜索每一行,若那行中带ad将re替换成ve;
sed '2s/re/ve/g' file #file文件搜索第二行,若那行中带ad将re替换成ve;
s搜索,!s排除匹配ad之外的所有行
g全局,若不写只替换该行首个匹配,即默认1
ad匹配地址,若不写即所有行

3.删除命令

1
2
3
4
5
6
7
sed 're/d' file #搜索re,并删除所在行
sed '/re/,/ve/d' file #删除多次re到ve之间的所有行
sed 're,/ve/d' file #删除第一次出现re到ve之间的所有行
!d 反转不删除匹配
1d 删除第一行
$d 删除最后一行

4.分组命令

1
2
3
4
5
6
sed ‘/re/,/ve/{/^$/d}’ file #删除多次在re到ve之间的所有空行
sed '/re/,/ve/{
>/^$/d
>s/ca/pa/
>} file

5.多重指令

1
2
3
4
5
6
7
1、sed ‘s/re/ve/; s/ca/pa/’ file
2、sed -e ‘s/re/ve/’ -e ‘s/ca/pa/’ file
3、sed '
> s/re/ve/
> s/ca/pa/' list

6.脚本文件使用

1
2
3
4
5
$ cat scriptfile
s/re/ve/
s/ca/pa/
$ sed -f scriptfile file #-f 指定sed脚本文件

7.sed常用命令汇总

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 在每一行后面增加一空行
sed G
# 将原来的所有空行删除并在每一行后面增加一空行。
# 这样在输出的文本中每一行后面将有且只有一空行。
sed '/^$/d;G'
# 在匹配式样“regex”的行之后插入一空行
sed '/regex/G'
# 在每一行开头处插入#
sed 's/^/#/'
# 文件中将:两边的互换位置
sed ‘s/\(.*\):\(.*\)’/\2:\1/'
# 将每两行连接成一行(类似“paste”)
sed '$!N;s/\n/ /'

8.sed特性:

• 如果没有指定地址,那么命令将应用于每一行
• 如果只有一个地址,那么命令应用于这个地址匹配的每一行
• 如果指定了由逗号分隔的两个地址,那么命令应用于匹配第一个地址的第一行和它后面的行,直到匹配第二个地址的行(包括此行)
• 如果地址后面有感叹号(!),那么命令就应该用于不匹配该地址的所有行