### Linux sed 命令全参数及用法详解
#### 一、sed 命令简介
`sed`(stream editor)是 Linux 和 Unix 系统中的一个强大的文本处理工具,它能够对输入流(标准输入或文件)进行编辑、过滤、替换等操作,并将结果输出到标准输出或指定文件中。`sed` 支持正则表达式,这使得它在处理文本文件时非常灵活高效。
#### 二、基本语法与格式
sed 的基本语法为:
```
sed [选项] '命令' 文件名
```
其中,“命令”可以是一系列指令的组合,多个命令之间可以用分号(`;`)或换行符隔开。
#### 三、常见选项
- `-e`:执行多个 sed 命令。
- `-f`:从文件中读取 sed 命令。
- `-n`:抑制默认的输出行为,只输出被明确指定输出的行。
- `-i`:直接修改文件内容,而不是输出到标准输出。
#### 四、基本命令
- `s/{oldvalue}/{newvalue}/[flags]`:替换命令,用于替换文本中的字符串。
- `{oldvalue}`:要查找并替换的旧字符串。
- `{newvalue}`:新字符串,用于替换旧字符串。
- `[flags]`:可选标志,例如 `g` 表示全局替换所有匹配项,而非仅替换每个模式空间中的第一次出现。
#### 五、示例解析
1. **单个替换命令**:
```bash
echo "The tiger cubs will meet on Tuesday after school" | sed 's/tiger/wolf/'
```
这条命令将输出:“The wolf cubs will meet on Tuesday after school”。这里只替换了第一个匹配到的“tiger”。
2. **多命令组合**:
```bash
echo "The tiger cubs will meet on Tuesday after school" | sed -e 's/tiger/wolf/' -e 's/after/before/'
```
这里同时执行了两个替换操作:将“tiger”替换为“wolf”,并将“after”替换为“before”。
3. **使用文件中的命令**:
```bash
sed -f sedlist sample_one
```
此命令读取文件`sedlist`中的命令,并应用于`sample_one`文件。
4. **模式地址**:
```bash
sed '5,6s/1/2/' sample_one
```
这条命令只对第5行到第6行之间的文本执行替换操作。
5. **输出控制**:
```bash
sed -n '2,6p' sample_one
```
这条命令只输出第2行到第6行的内容。
6. **删除行**:
```bash
sed '/^$/d' {filename}
```
删除文件中所有空行。
7. **条件替换**:
```bash
sed '/two/s/1/2/' sample_one
```
只在包含“two”的行中进行替换操作。
8. **替换并停止处理**:
```bash
sed '/three/q' sample_one
```
在找到“three”后立即退出,并不再继续处理后续行。
9. **更改行内容**:
```bash
sed '/two/c We are no longer using two' sample_one
```
将包含“two”的行内容替换为“We are no longer using two”。
10. **复杂替换**:
```bash
sed -f sublist sample_one
```
使用`sublist`文件中的多个替换命令来处理`sample_one`。
11. **逐个命令示例**:
```bash
sed 's/two/three/' sample_one
sed 's/three/four/' sample_one
```
先将“two”替换为“three”,再将“three”替换为“four”。
通过以上示例可以看出,`sed` 命令非常强大且灵活,适用于各种复杂的文本处理任务。掌握这些基本命令及其用法,可以帮助用户更高效地管理文本数据。