【命令操作】Linux三剑客之sed详解|统信|麒麟|方德

鹏大搞运维 2024-11-08 12:45:05

原文链接:

Hello,大家好啊!今天带来一篇关于Linux三剑客之sed命令详解的文章。sed是一款功能强大的流编辑器,它可以在命令行中快速处理文本,支持替换、插入、删除等操作,特别适合用于处理大型文件或批量文本处理任务。

本文将详细介绍sed命令的使用方法及其实际应用场景,帮助大家更好地掌握这款灵活的文本处理工具!欢迎大家分享转发,点个关注和在看吧!

什么是sed命令?

sed(Stream Editor)是一款流式文本处理工具,能够逐行读取文件或输入流,对文本内容进行编辑。sed的常见用途包括文本替换、删除、插入以及数据提取等。它的强大之处在于能够直接在命令行进行快速的文本处理,而不需要打开编辑器。

1.基本语法

sed [选项] '命令' 文件名

sed会逐行读取文件或标准输入,执行指定的命令后输出结果,默认情况下不修改原文件。

2.基本用法

查看文件内容:

pdsyw@pdsyw-PC:~/Desktop$ sed '' pdsyw.txt

不加任何命令,直接显示文件内容。

替换文本:

pdsyw@pdsyw-PC:~/Desktop$ sed 's/Bob/Tom/' pdsyw.txt

s表示替换操作。该命令会将每行中第一个匹配的Bob替换为Tom,并输出结果。

全局替换:

pdsyw@pdsyw-PC:~/Desktop$ sed 's/Bob/Tom/g' pdsyw.txt

在每行中替换所有匹配的Bob。

替换并保存到文件(-i选项):

pdsyw@pdsyw-PC:~/Desktop$ sed -i 's/Bob/Tom/g' pdsyw.txt

使用-i选项,直接修改文件内容。

3.常用选项

-i:直接修改文件,不输出结果到终端。

pdsyw@pdsyw-PC:~/Desktop$ sed -i 's/Tom/Bob/g' pdsyw.txt

-e:执行多条sed命令。

pdsyw@pdsyw-PC:~/Desktop$ sed -e 's/Bob/Tom/' -e 's/Alice/Nana/' pdsyw.txt

一次性执行多个sed命令。

-n:禁止默认输出,仅输出匹配的内容。

pdsyw@pdsyw-PC:~/Desktop$ sed -n 's/Bob/Tom/p' pdsyw.txt

-n会禁用默认输出,使用p命令只输出替换后的行。

4.进阶替换操作

限定范围替换:

pdsyw@pdsyw-PC:~/Desktop$ sed '1,3s/Bob/Tom/' pdsyw.txt

仅在第1到第3行之间替换Bob为Tom。

在指定行中替换:

pdsyw@pdsyw-PC:~/Desktop$ sed '2s/Bob/Tom/' pdsyw.txt

仅在第2行替换Bob为Tom。

正则表达式替换:

pdsyw@pdsyw-PC:~/Desktop$ sed 's/[0-9]/#/g' pdsyw.txt

将文件中的所有数字替换为#。

在替换中使用捕获组:

pdsyw@pdsyw-PC:~/Desktop$ echo "Hello 123" | sed 's/\(Hello\) \(123\)/\2 \1/'

输出123 Hello。\1和\2表示捕获的第一组和第二组内容。

5.删除文本

删除指定行:

pdsyw@pdsyw-PC:~/Desktop$ sed '2d' pdsyw.txt

删除第2行内容。

删除特定范围的行:

pdsyw@pdsyw-PC:~/Desktop$ sed '3,5d' pdsyw.txt

删除第3到第5行的内容。

删除匹配特定模式的行:

pdsyw@pdsyw-PC:~/Desktop$ sed '/Bob/d' pdsyw.txt

删除包含Bob的所有行。

删除空行:

pdsyw@pdsyw-PC:~/Desktop$ sed '/^$/d' pdsyw.txt

删除所有空行。^$表示空行的正则表达式。

6.插入和追加文本

在指定行前插入内容:

pdsyw@pdsyw-PC:~/Desktop$ sed '2i\This is inserted text' pdsyw.txt

在第2行前插入一行文本This is inserted text。

在指定行后追加内容:

pdsyw@pdsyw-PC:~/Desktop$ sed '2a\This is appended text' pdsyw.txt

在第2行后追加一行文本This is appended text。

在匹配行前插入内容:

pdsyw@pdsyw-PC:~/Desktop$ sed '/Bob/i\Inserted before Bob' pdsyw.txt

在匹配到Bob的行前插入文本。

在匹配行后追加内容:

pdsyw@pdsyw-PC:~/Desktop$ sed '/Bob/a\Appended after Bob' pdsyw.txt

在匹配到Bob的行后追加文本。

7.修改文本

替换整行:

pdsyw@pdsyw-PC:~/Desktop$ sed '2c\This is a new line' pdsyw.txt

将第2行替换为This is a new line。

替换匹配行:

pdsyw@pdsyw-PC:~/Desktop$ sed '/Bob/c\This line is replaced' pdsyw.txt

将包含Bob的行替换为This line is replaced。

8.显示和打印

打印指定行:

pdsyw@pdsyw-PC:~/Desktop$ sed -n '3p' pdsyw.txt

只显示第3行内容,-n禁止默认输出,p用于打印匹配的行。

打印特定范围的行:

pdsyw@pdsyw-PC:~/Desktop$ sed -n '3,5p' pdsyw.txt

显示第3到第5行内容。

打印匹配模式的行:

pdsyw@pdsyw-PC:~/Desktop$ sed -n '/Bob/p' pdsyw.txt

只打印包含Bob的行。

打印行号:

pdsyw@pdsyw-PC:~/Desktop$ sed '=' pdsyw.txt

输出文件内容的同时打印行号。

9.变量替换和环境变量

可以使用环境变量作为sed的替换内容:

pdsyw@pdsyw-PC:~/Desktop$ name="Alice"pdsyw@pdsyw-PC:~/Desktop$ sed "s/Bob/$name/g" pdsyw.txt

这会将pdsyw.txt文件中Bob替换为Alice。

10.使用正则表达式

基本正则表达式:

pdsyw@pdsyw-PC:~/Desktop$ sed -n '/^[A-Z]/p' pdsyw.txt

输出以大写字母开头的行。^表示行首,[A-Z]表示大写字母。

匹配数字和字母组合:

pdsyw@pdsyw-PC:~/Desktop$ sed 's/[0-9]\+/[数字]/g' pdsyw.txt

将所有连续的数字替换为[数字]。

替换包含特殊字符的内容:

pdsyw@pdsyw-PC:~/Desktop$ sed 's/\/usr\/local/\/opt/g' pdsyw.txt

替换/usr/local为/opt。在sed中,斜杠/是分隔符,需要转义为\/。

11.使用多个命令

使用-e选项:

pdsyw@pdsyw-PC:~/Desktop$ sed -e 's/Bob/Tom/' -e 's/Alice/Nana/' pdsyw.txt

使用-e指定多个命令。

使用分号分隔多个命令:

pdsyw@pdsyw-PC:~/Desktop$ sed '1d; s/Bob/Tom/g' pdsyw.txt

删除第1行并将所有foo替换为bar。

在脚本文件中使用sed:

可以将多个sed命令写入脚本文件(例如script.sed):

pdsyw@pdsyw-PC:~/Desktop$ vim script.sedpdsyw@pdsyw-PC:~/Desktop$ cat script.sed# script.sed1ds/Bob/Tom/g

然后执行:

pdsyw@pdsyw-PC:~/Desktop$ sed -f script.sed pdsyw.txt

12.sed常见使用场景

批量替换文件内容:

pdsyw@pdsyw-PC:~/Desktop$ sed -i 's/http:/https:/g' *.html

将当前目录下所有.html文件中的http:替换为https:。

去除文件中的空白行:

pdsyw@pdsyw-PC:~/Desktop$ sed '/^$/d' pdsyw.txt

删除所有空行。

批量删除文件中的HTML标签:

pdsyw@pdsyw-PC:~/Desktop$ sed 's/<[^>]*>//g' pdsyw.txt

删除文件中的所有HTML标签。

提取日志文件中的错误信息:

root@pdsyw-PC:~# sed -n '/error/p' /var/log/messages | head -1

打印包含error的日志行。

在文本文件开头插入多行内容:

pdsyw@pdsyw-PC:~/Desktop$ sed -i '1i\This is line 1\nThis is line 2' pdsyw.txt

通过本文的介绍,大家应该已经掌握了sed命令的基本用法和各种应用场景。sed的强大功能使其在Linux文本处理领域中扮演了重要角色,特别是在批量替换、文件格式化和日志处理等方面,有着不可替代的优势。如果您觉得这篇文章对您有帮助,别忘了分享、转发,并记得点个关注和在看!感谢大家的阅读,我们下次再见!

0 阅读:6

鹏大搞运维

简介:感谢大家的关注