Linux运维基础之sed命令详解

Linux运维基础之sed命令详解

sed 是 “Stream Editor”(流编辑器)的缩写,它是一款功能强大的实用工具,可让你在命令行中直接解析和转换文本。无论你处理的是配置文件、脚本还是纯文本,sed 都是你快速高效处理文本的得力工具。

sed 的主要用途是搜索特定的文本模式,并将其替换为其他内容。它还可以删除或插入行,并执行其他文本转换。它对于批量编辑文件或在 shell 脚本中自动执行各种任务特别有用。

虽然 sed 本身的功能非常多,但它经常与其他 Linux 命令结合使用,如用于文本处理的 awk、用于规则搜索的 grep 和用于显示文件内容的 cat。这些工具共同构成了 Linux 环境下强大的文本处理工具包。

sed 命令的一般语法

$ sed [OPTIONS] [FILE]...

1. 文本替换

echo "Text" | sed 's/Replaceable_Word/The_Word_That_Replaces/'

使用 sed 命令搜索并替换文本的任何部分。's' 表示搜索和替换任务。
示例:

比方说,您有一个字符串 ” I love CSS “,您想用 “CSS Libraries” 替换 “CSS”。

echo "I love CSS" | sed 's/CSS/CSS Libraries/'
I love CSS Libraries

在本例中,echo 命令输出 ” I love CSS “,然后 sed 将 ” CSS” 替换为 ” CSS Libraries “。最后的输出结果就是 “I love CSS Libraries“。

2. 替换文件中特定行的文本

sed '[line] s/harder/easier/g' [file]

sed 命令的 'g' 选项用于替换任何与规则匹配的内容。

示例:

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

Life is hard.
Working harder is the key to success.
The harder you work, the luckier you get.

如果要将 example.txt 第 2 行中所有出现的 ” harder” 一词替换为 “easier“,您可以运行:

sed '2 s/harder/easier/g' example.txt

运行该命令后,终端上显示的输出将是:

Life is hard.
Working easier is the key to success.
The harder you work, the luckier you get.

请注意,”harder” 一词只在第 2 行被替换为 “easier“。

如果想将这些更改保存到文件中,可以使用 -i 选项:

sed -i '2 s/harder/easier/g' example.txt

运行此命令后, example.txt 的内容将永久更改为:

Life is hard.
Working easier is the key to success.
The harder you work, the luckier you get.

3. 用新文本替换第一个匹配项

sed 's/harder/easier/' [file]

该命令只替换搜索规则的第一个匹配项。

示例:

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

Life is harder than we think.
Working harder is the key to success.
No pain, no gain. Work harder.

您可以使用 sed 命令将每一行中的 ” harder “替换为 “easier“:

sed 's/harder/easier/' example.txt

运行该命令后,输出结果将是:

Life is easier than we think.
Working easier is the key to success.
No pain, no gain. Work easier.

4. 删除匹配行

sed '/Something/d' example.txt

使用 sed 命令的 d 选项可以删除文件中的任意一行。

示例:

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

Hello World
Something is here
Another line
Yet another line
Something else

运行命令 sed '/Something/d' example.txt 将输出结果:

Hello World
Another line
Yet another line

5. 搜索不区分大小写的单词 + 删除

sed '/Sample/Id' example.txt

sed 命令的 I 选项用于以不区分大小写的方式搜索匹配模式。

示例:

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

This is a Sample line.
Another line.
Yet another Sample line.
Final line.

运行 sed '/Sample/Id' example.txt 命令将产生以下输出:

Another line.
Final line.

6. 用大写字母替换单词

sed 's/\(libraries\)/\U\1/Ig' example.txt

使用 sed 命令的 U 选项可将任何文本转换为大写字母。

示例:

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

I love libraries.
libraries are great.
You can find many books in libraries.

运行 sed 命令后,输出结果将是

I love LIBRARIES.
LIBRARIES are great.
You can find many books in LIBRARIES.

7. 用小写字母替换单词

sed 's/\(libraries\)/\L\1/Ig' example.txt

sed 命令的 L 选项用于将任何文本转换为小写字母。

示例:

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

Libraries are essential for research.
libraries help in many ways.
I love LIBRARIES!

运行 sed 命令后,输出结果将是:

libraries are essential for research.
libraries help in many ways.
I love libraries!

8. 在文件中插入空行

sed G [file]

使用 sed 命令的 G 选项在文件的每一行后插入空行。

示例:

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

Hello
World
This
Is
A
Test

您可以运行以下命令,在每行末尾添加一个额外的换行符:

sed G example.txt

运行该命令后,输出结果将是:

Hello

World

This

Is

A

Test

9. 打印文件行号

sed '=' [file]

= 符号用于在文件中每行文本前打印行号。

示例:

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

Hello
World
This
Is
A
Test

您可以运行以下命令来打印每行前的行号:

sed '=' example.txt
1
Hello
2
World
3
This
4
Is
5
A
6
Test

更多 Linux 命令

下面罗列了最常见的一些 Linux 命令,您可以根据自己的需要查阅对应命令的详细解析:

目录操作 rmdir · cd · pwd · exa · ls
文件操作 cat · cp · dd · less · touch · ln · rename · more · head
文件系统操作 chown · mkfs · locate
网络 ping · curl · wget · iptables · mtr
搜索和文本处理 find · grep · sed · whatis · ripgrep · fd · tldr
系统信息和管理 env · history · top · who · htop · glances · lsof
用户和会话管理 screen · su · sudo · open

此外,我们还整理 Linux 命令行大全,以帮助大家全面深入地学习 Linux。