sed(全称:Stream Editor)是一个在Linux系统中广泛使用的 流编辑器 ,用于对文件或数据流进行文本处理。它具有强大的文本替换、插入和删除功能,并且支持正则表达式,适用于日志分析、文件批处理和脚本自动化等场景。
基本语法
sed的基本语法如下:
sed [options] 'command' file
-
options
:可选参数,用于控制sed的行为。 -
command
:要执行的sed命令。 -
file
:要处理的文件名。如果不指定文件名,sed将从标准输入读取数据。
常用选项
-
-e
:允许多次使用sed的编辑命令。 -
-i
:直接修改文件(原地编辑)。 -
-n
:不自动打印模式空间中的行,常与p
命令配合使用,用于只打印匹配的行。 -
-f
:从指定的脚本文件读取sed命令。 -
-r
:使用扩展正则表达式。
常用命令
- 替换文本
-
s/old/new/
:替换匹配的第一个字符串。 -
s/old/new/g
:替换匹配的所有字符串(全局替换)。 -
s/old/new/gi
:替换匹配的所有字符串,不区分大小写。
- 删除文本行
-
d
:删除当前行。 -
2d
:删除第二行。 -
5,10d
:删除第5到第10行。 -
/pattern/d
:删除匹配指定模式的行。
- 追加文本
-
/pattern/a\new text
:在匹配指定模式的行后追加文本。
- 插入文本
-
/pattern/i\new text
:在匹配指定模式的行前插入文本。
- 替换指定行的内容
-
c\new content
:替换当前行。
示例
- 替换文本
sed 's/ERROR/WARN/g' log.txt
```
将`log.txt`文件中的所有`ERROR`替换为`WARN`<b class="card40_249__sup_a7f6" data-sup="sup">2</b>。
2. **直接修改文件** <b class="card40_249__sup_a7f6" data-sup="sup">4</b>
```bash
sed -i 's/old/new/g' file.txt
```
直接修改`file.txt`文件,将其中的所有`old`替换为`new`。
3. **替换带有分隔符的文本** <b class="card40_249__sup_a7f6" data-sup="sup">2</b>
```bash
sed 's|old_string|new_string|g' file.txt
```
将`file.txt`文件中的所有`old_string`替换为`new_string`<b class="card40_249__sup_a7f6" data-sup="sup">5</b>。
4. **删除指定范围的行** <b class="card40_249__sup_a7f6" data-sup="sup">6</b>
```bash
sed '5,10d' file.txt
```
删除`file.txt`文件中的第5到第10行<b class="card40_249__sup_a7f6" data-sup="sup">3</b>。
5. **追加文本**
```bash
sed '/Linux/a\This is added text' file.txt
```
在`file.txt`文件中匹配到`Linux`的行后追加`This is added text`<b class="card40_249__sup_a7f6" data-sup="sup">1</b>。
6. **插入文本** <b class="card40_249__sup_a7f6" data-sup="sup">3</b>
```bash
sed '/Linux/i\This is inserted text' file.txt
```
在`file.txt`文件中匹配到`Linux`的行前插入`This is inserted text`<b class="card40_249__sup_a7f6" data-sup="sup">1</b>。
### 脚本文件
可以将多个sed命令写入一个脚本文件,然后通过`-f`选项执行该脚本<b class="card40_249__sup_a7f6" data-sup="sup">3</b>:
```bash
sed -f script.sed file.txt
扩展正则表达式
使用-r
选项可以启用扩展正则表达式:
sed -r 's/(old)(.*)/\2\1/g' file.txt
总结
sed是一个功能强大的文本处理工具,通过结合正则表达式,可以实现复杂的文本编辑任务。掌握其基本语法和常用命令,可以大大提高在Linux环境下的文本处理效率。