sed(全称Stream Editor)是一种强大的文本处理工具,主要用于在Linux环境中对文本文件进行查找、替换、插入和删除操作。它逐行读取文件内容,将当前处理的行存储在临时缓冲区中(称为“模式空间”),然后对缓冲区中的内容执行指定的编辑命令,最后将处理结果输出到屏幕或保存到文件中。
基本语法
sed的基本语法如下:
sed [options] 'command' file
-
options
:可选参数,用于控制sed的行为,例如是否直接修改文件、是否输出所有行等。 -
command
:要执行的编辑命令。 -
file
:要处理的文件名。如果不指定文件名,sed将从标准输入读取数据。
常用命令
- 文本替换
-
s/old/new/
:将第一个匹配到的old
替换为new
。 -
s/old/new/g
:将所有匹配到的old
替换为new
。 -
s/old/new/i
:替换时不区分大小写。
- 删除文本行
-
d
:删除当前行。 -
2d
:删除第2行。 -
5,10d
:删除第5行到第10行。 -
/pattern/d
:删除包含指定模式的行。
- 追加文本
-
/pattern/a\new text
:在匹配到的模式后追加一行文本。
- 插入文本
-
/pattern/i\new text
:在匹配到的模式前插入一行文本。
- 替换指定行的内容
-
c\new content
:替换当前行内容为new content
。
示例
- 替换所有Linux为Unix
sed 's/Linux/Unix/g' file.txt
```
2. **删除包含root的行** <b class="card40_249__sup_a7f6" data-sup="sup">5</b>
sed '/root/d' /etc/passwd
```
- 在匹配到的文本后追加一行文本
sed '/Linux/a\This is added text' file.txt
```
4. **直接修改文件内容** <b class="card40_249__sup_a7f6" data-sup="sup">3</b>
sed -i 's/old/new/g' file.txt
```
- 使用脚本文件进行多行编辑
sed -f script.sed file.txt
```
### 注意事项
- 默认情况下,sed不会修改原文件内容,除非使用`-i`选项。
- 使用扩展正则表达式时,需要使用`-r`选项<b class="card40_249__sup_a7f6" data-sup="sup">2</b>。
- 通过管道传递输入流时,可以使用`echo "text" | sed 'command'`。
sed是一个功能强大的文本处理工具,适合处理各种文本编辑任务<b class="card40_249__sup_a7f6" data-sup="sup">1</b>。通过熟练掌握其基本语法和常用命令,可以大大提高文本处理的效率<b class="card40_249__sup_a7f6" data-sup="sup">7</b>。