105 lines
1.9 KiB
Markdown
105 lines
1.9 KiB
Markdown
## 1、`sed` 概览
|
||
|
||
`sed` 是 Linux 中非常常见的流编辑器(stream editor),它会按行读取输入内容,然后对文本进行处理。
|
||
|
||
常见用途:
|
||
|
||
- 文本替换
|
||
- 删除指定行
|
||
- 打印指定范围内容
|
||
- 批量修改配置文件
|
||
|
||
## 2、基本特点
|
||
|
||
可以这样理解 `sed`:
|
||
|
||
- 从文件或标准输入中逐行读取内容
|
||
- 对每一行按规则处理
|
||
- 默认把处理结果输出到标准输出
|
||
|
||
如果想直接修改原文件,通常需要使用 `-i`。
|
||
|
||
## 3、常见选项
|
||
|
||
- `-r`:使用扩展正则表达式
|
||
- `-i`:直接修改文件内容
|
||
- `-n`:默认不输出,常配合 `p` 使用
|
||
|
||
## 4、最常见的替换命令
|
||
|
||
基本格式:
|
||
|
||
```shell
|
||
sed 's/旧内容/新内容/修饰符' 文件名
|
||
```
|
||
|
||
其中:
|
||
|
||
- `s`:表示 substitute(替换)
|
||
- `g`:表示行内全局替换
|
||
|
||
### 4.1 替换每行第一个匹配项
|
||
|
||
```shell
|
||
sed 's/root/admin/' file.txt
|
||
```
|
||
|
||
### 4.2 替换每行所有匹配项
|
||
|
||
```shell
|
||
sed 's/root/admin/g' file.txt
|
||
```
|
||
|
||
### 4.3 直接修改原文件
|
||
|
||
```shell
|
||
sed -i 's/root/admin/g' file.txt
|
||
```
|
||
|
||
## 5、常见示例
|
||
|
||
### 5.1 打印指定行
|
||
|
||
```shell
|
||
sed -n '1,5p' /etc/passwd
|
||
```
|
||
|
||
表示只打印第 1 到第 5 行。
|
||
|
||
### 5.2 删除指定行
|
||
|
||
```shell
|
||
sed '3d' file.txt
|
||
```
|
||
|
||
表示删除第 3 行后输出结果。
|
||
|
||
### 5.3 删除空行
|
||
|
||
```shell
|
||
sed '/^$/d' file.txt
|
||
```
|
||
|
||
### 5.4 替换配置项
|
||
|
||
```shell
|
||
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
|
||
```
|
||
|
||
这是运维里很常见的批量改配置写法。
|
||
|
||
## 6、实战建议
|
||
|
||
- 批量改配置时优先考虑 `sed -i`
|
||
- 涉及正则时可结合 `-r`
|
||
- 正式改文件前,建议先不加 `-i` 预览结果
|
||
- 对系统配置文件做替换前,最好先备份
|
||
|
||
## 7、小结
|
||
|
||
- `sed` 是按行处理文本的流编辑器
|
||
- `s/旧/新/g` 是最常用的替换格式
|
||
- `-i` 用于直接修改文件
|
||
- `-n` 常和 `p` 搭配控制输出
|
||
- 它非常适合批量替换和配置修改场景
|