如果想将 sed 操作的结果写入源文件,加上 -i
参数即可。
行删除
行删除表达式主要包含两部分:
- 匹配规则
- 表达式以
d
或者 !d
结尾,前者表示删除匹配到的行,后者表示删除未匹配到的行
匹配规则是一个范围,用逗号隔开,左右闭区间。例如表达式 1,3d
表示删除 1, 2, 3 这三行。逗号和后面的行号省略时,表示匹配单行。例如 1d
表示删除第一行。
匹配规则可以是一个正则表达式,正则表达式左右使用斜杠包裹。例如 /a/d
表示删除所有包含字符 a
的行。左区间和右区间都可以是正则表达式。表示一直删除到匹配到右区间的正则表达式为止,然后继续搜索左区间。
示例
1
2
3
4
5
6
7
8
9
10
| cat a.txt
hello
world
three
four
five
six
eight
nine
|
- 删除匹配到 world 的行
1
2
3
4
5
6
7
8
| hello
three
four
five
six
eight
nine
|
2. 删除第一行
1
2
3
4
5
6
7
8
| world
three
four
five
six
eight
nine
|
- 从第三行开始,每隔一行删除
1
2
3
4
5
| hello
world
four
six
eight
|
4. 删除从第4行到第8行
1
2
3
4
5
6
7
8
9
10
| hello
world
three
nine
``
5. 删除最后一行
```bash
sed '$d' a.txt
|
1
2
3
4
5
6
7
8
| hello
world
three
four
five
six
eight
|
6. 删除空行
1
2
3
4
5
6
7
8
| hello
world
three
four
five
six
eight
nine
|
有些空行其实包含了空格或者 tab
7. 从匹配行到末尾行
1
2
3
4
5
6
| hello
world
three
four
five
six
|
8. 删除匹配行和之后两行
1
| sed '/hello/,+2d' a.txt
|
1
2
3
4
5
6
| four
five
six
eight
nine
|