Linux 三剑客之 sed:数据的流式编辑

133 阅读2分钟

在 Linux 操作系统中,sed 是一个强大的流式编辑工具,被广泛用于自动化编辑和处理文本文件。作为 Linux 命令行的“三剑客”之一(另两位是 grep 和 awk),sed 能够通过命令直接在文本流上进行替换、删除、插入和修改操作。本文将详细介绍 sed 的用法和实际应用场景,帮助你更高效地处理文本数据。

一、sed 基本概念

sed 的全称是 Stream Editor,即流编辑器。它可以逐行处理输入数据,并将处理结果输出到标准输出。sed 的基本语法如下:

sed [OPTIONS] 'script' [input-file]

1.1 基本用法

假设有一个名为 example.txt 的文件,内容如下:

Hello World
Hello Linux
Welcome to the world of Linux

使用 sed 替换文件中的文本:

sed 's/World/Universe/' example.txt

输出:

Hello Universe
Hello Linux
Welcome to the world of Linux

二、常用命令和选项

2.1 替换文本

s 命令用于替换文本,基本格式为 s/old/new/

示例:

sed 's/Linux/Unix/' example.txt

输出:

Hello World
Hello Unix
Welcome to the world of Unix

全局替换:

默认情况下,sed 只替换每行的第一个匹配项。要替换所有匹配项,需要使用 g 标志:

sed 's/Hello/Hi/g' example.txt

输出:

Hi World
Hi Linux
Welcome to the world of Linux

2.2 删除行

d 命令用于删除行。

删除第2行:

sed '2d' example.txt

输出:

Hello World
Welcome to the world of Linux

删除包含特定模式的行:

sed '/Linux/d' example.txt

输出:

Hello World

2.3 插入和追加文本

i 命令用于在指定行前插入文本,a 命令用于在指定行后追加文本。

在第2行前插入文本:

sed '2i\This is an inserted line' example.txt

输出:

Hello World
This is an inserted line
Hello Linux
Welcome to the world of Linux

在第2行后追加文本:

sed '2a\This is an appended line' example.txt

输出:

Hello World
Hello Linux
This is an appended line
Welcome to the world of Linux

2.4 修改行

c 命令用于修改行内容。

修改第2行:

sed '2c\This is a changed line' example.txt

输出:

Hello World
This is a changed line
Welcome to the world of Linux

三、使用正则表达式

sed 支持基本正则表达式,可以进行复杂的文本处理。

3.1 匹配行首和行尾

替换行首的文本:

sed 's/^Hello/Hi/' example.txt

输出:

Hi World
Hi Linux
Welcome to the world of Linux

替换行尾的文本:

sed 's/Linux$/Unix/' example.txt

输出:

Hello World
Hello Unix
Welcome to the world of Unix

3.2 使用分组和反向引用

替换重复的单词:

假设有一个文件 duplicate.txt,内容如下:

foo foo bar

使用分组和反向引用去重:

sed 's/(\b[a-zA-Z]+\b) \1/\1/' duplicate.txt

输出:

foo bar

四、sed 脚本

可以将多条 sed 命令写入一个脚本文件中,然后执行该脚本。

4.1 创建脚本文件

创建一个名为 script.sed 的文件,内容如下:

s/World/Universe/
2d

4.2 执行脚本文件

使用 -f 选项执行脚本文件:

sed -f script.sed example.txt

输出:

Hello Universe
Welcome to the world of Linux

五、实际应用场景

5.1 批量修改配置文件

使用 sed 批量修改配置文件中的某些参数。例如,修改所有配置文件中的 port 参数:

sed -i 's/port=8080/port=9090/' *.conf

5.2 日志文件分析

使用 sed 过滤和格式化日志文件。例如,从日志文件中提取 IP 地址:

sed -n 's/.*(\b[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}\b).*/\1/p' access.log

5.3 数据清洗

使用 sed 清洗数据文件中的噪声数据。例如,删除数据文件中的空行:

sed '/^$/d' data.txt

结语

sed 是一个功能强大且灵活的流式编辑工具,通过掌握它的基本和高级用法,你可以高效地进行文本替换、删除、插入和修改操作。无论是批量修改配置文件、分析日志文件还是清洗数据,sed 都能帮助你简化工作流程。