Linux sed命令详解:文本过滤与转换的利器

需积分: 37 6 下载量 36 浏览量 更新于2024-09-08 收藏 22KB DOCX 举报
"sed命令详解" `sed` 是流编辑器(Stream Editor),它主要用于过滤和转换文本内容。这个工具允许用户对输入数据流(通常来自标准输入)进行一系列的编辑操作,而无需交互式地编辑文件本身。在Linux和Unix系统中,`sed` 是一种非常实用的命令行工具,尤其在批量处理文本文件时。 ### SYNOPSIS `sed` 的基本用法是: ```bash sed [OPTION]... {script-only-if-no-other-script} [input-file]... ``` 这里,`[OPTION]` 是可选参数,`{script-only-if-no-other-script}` 是编辑指令,`[input-file]` 是输入文件名,如果不指定,则默认使用标准输入。 ### 选项说明 - `-n, --quiet, --silent`: 这些选项抑制了默认的输出,只有当有特定的输出命令(如 `p`)时才会显示模式空间的内容。 - `-e script, --expression=script`: 添加一个或多个编辑指令。你可以多次使用 `-e` 选项来添加多个指令。 - `-f script-file, --file=script-file`: 从指定的文件中读取编辑指令,每个指令占据文件的一行。 - `-i[SUFFIX], --in-place[=SUFFIX]`: 在原文件上进行编辑。如果提供了 `SUFFIX`,会创建一个备份文件,其扩展名为 `SUFFIX`。 - `-r, --regexp-extended`: 使用扩展正则表达式,提供更强大的匹配功能。 ### 地址定界 地址定界用于指定 `sed` 应作用于哪些行或行范围: 1. **空地址**:表示对所有行进行处理。 2. **单地址**: - `#`: 指定第 `#` 行。 - `/pattern/`: 匹配到包含指定模式的行。 3. **地址范围**: - `#,#`: 从第 `#` 行到第 `#` 行。 - `#,+#`: 从第 `#` 行开始,每隔 `+` 行处理一次。 - `#,/pat1/`: 从第 `#` 行到第一次出现 `pat1` 的行。 - `/pat1/,/pat2/`: 从第一次出现 `pat1` 的行到第一次出现 `pat2` 的行。 - `$`: 最后一行。 ### 步进(步进地址) 步进允许你按照特定的行间隔处理行,例如: - `1~2`: 所有奇数行。 - `2~2`: 所有偶数行。 ### 编辑命令 - `d`: 删除模式空间的内容,即删除当前行。 - `p`: 显示模式空间中的内容,即打印当前行。 - `=`: 打印当前行号。 - `a\text`: 在行后面追加文本,支持使用 `\n` 实现多行追加。 - `i\text`: 在行前面插入文本,同样支持多行插入。 - `c\text`: 将匹配到的行替换为指定的文本。 - `r filename`: 从 `filename` 文件中读取文本并追加到当前行之后,用于合并文件。 ### 示例应用 1. 删除所有包含特定模式的行: ```bash sed '/pattern/d' input.txt ``` 2. 在第5行后插入文本: ```bash sed '5i\Inserted text' input.txt ``` 3. 在所有行的末尾追加文本: ```bash sed 's/$/appended text/' input.txt ``` `sed` 命令的灵活性和强大性使其成为处理文本文件的强大工具,无论是简单的查找替换,还是复杂的文本转换,都可以通过编写合适的脚本来完成。理解并熟练使用 `sed` 命令,可以极大地提高文本处理的效率。