✅ linux150个基础命令(书签版)
✅linux安装教程
sed(Stream Editor)是一种流编辑器,它通过读取输入流(文件或管道),按照指定的规则进行编辑操作,并将结果输出到标准输出。sed 的操作是基于行的,它可以对文本进行替换、删除、插入等多种操作。
基础命令格式
我们来拆解一下。
sed
:这是命令的核心,告诉系统我们即将使用流编辑器。
-n
:这个选项的作用是禁止 sed 默认的输出行为。通常情况下,sed 会将处理后的每一行都输出到屏幕上,但加上 -n
选项后,只有满足特定条件的行才会被输出。
'n'p
:这是 sed 的编辑指令。单引号内的 n
是一个数字,表示第几行;p
是打印的意思。所以,'n'p
的意思是打印第 n 行的内容。
假设我们有一个名为 example.txt
的文件,内容如下:
如果我们执行命令 sed -n '2'p example.txt
,那么输出结果将是:
这是因为我们指定打印第 2 行的内容。
如何使用sed
删除行?
在sed
命令中,d
是一个非常重要的指令,代表“删除”(delete)。使用sed
删除行的基本格式是:
这里的n
是你想要删除的行号,filename
是你要处理的文件名。
实例演示
假设我们有一个名为1.txt
的文件,内容如下:
1234567781111111111111aaaaaaaaaabbbbbbbbbbbb
如果我们想要删除第一行,可以使用以下命令:
执行后,输出结果将是:
1111111111111aaaaaaaaaabbbbbbbbbbbb
第一行被成功删除了。
删除包含特定字符的行
sed
不仅可以删除指定的行,还可以删除包含特定字符或模式的行。例如,如果我们想要删除包含“oo”的行,可以使用以下命令:
这个命令会查找文件中所有包含“oo”的行,并将它们删除。
直接修改文件
如果你想要直接修改文件而不是仅仅输出到屏幕,可以使用-i
选项。这会直接在原文件上进行修改。例如:
执行后,1.txt
文件中所有包含“oo”的行都会被删除。

如何使用sed
替换文本?
在sed
命令中,s
是一个非常重要的指令,代表“替换”(substitute)。使用sed
替换文本的基本格式是:
sed 's/old/new/g' filename
这里的old是你想要替换的文本,new是替换后的文本,g表示全局替换(即替换行中所有匹配的文本),filename是你要处理的文件名。实例演示假设我们有一个名为test.txt的文件,内容如下:roto:x:0:0:roto:roto:/bin/bashbin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologinadm:x:3:4:adm:/var/adm:/sbin/nologinlp:x:4:7:lp:/var/spool/lpd:/sbin/nologin如果我们想要将文件中的“to”替换为“ot”,可以使用以下命令:sed 's/to/ot/g' test.txt执行后,输出结果将是:roto:x:0:0:roto:roto:/bin/bashbin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologinadm:x:3:4:adm:/var/adm:/sbin/nologinlp:x:4:7:lp:/var/spool/lpd:/sbin/nologin可以看到,文件中的“to”都被替换为了“ot”。替换特定行的文本如果你只想替换特定行的文本,可以使用行号来指定。例如,如果我们只想替换第1行和第2行中的“to”为“ot”,可以使用以下命令:sed '1,2s/to/ot/g' test.txt执行后,输出结果将是:roto:x:0:0:roto:roto:/bin/bashbin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologinadm:x:3:4:adm:/var/adm:/sbin/nologinlp:x:4:7:lp:/var/spool/lpd:/sbin/nologin可以看到,只有第1行和第2行中的“to”被替换为了“ot”。

我们将深入探索sed
命令的高级用法——使用正则表达式进行文本替换。这在处理复杂的文本文件时非常有用,比如调整字段顺序、提取特定信息等。
如何使用sed
进行高级替换?
在sed
命令中,s
是一个非常重要的指令,代表“替换”(substitute)。使用sed
进行高级替换的基本格式是:
sed 's/pattern/replacement/' filename
这里的pattern
是匹配的正则表达式,replacement
是替换后的内容,filename
是你要处理的文件名。
实例演示
假设我们有一个名为test.txt
的文件,内容如下:
root:x:0:0:root:/root:/bin/bashbin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologinadm:x:3:4:adm:/var/adm:/sbin/nologinlp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
如果我们想要将文件中的字段顺序调整为用户名、家目录、shell,可以使用以下命令:
sed 's/\(root\)\(.*\)\(bash\)/\3\2\1/' test.txt | head -n5
执行后,输出结果将是:
bash:x:0:0:root:/rootbin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologinadm:x:3:4:adm:/var/adm:/sbin/nologinlp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
解释输出
可以看到,字段顺序已经被成功调整。
命令解析
sed命令:sed
是一个流编辑器,用于对文本进行过滤和转换。
替换指令:'s/\(root\)\(.*\)\(bash\)/\3\2\1/'
是sed
的替换指令。
\3
表示第三个分组的内容,即bash
。
\2
表示第二个分组的内容,即.*
匹配到的内容。
\1
表示第一个分组的内容,即root
。
s
表示替换(substitute)。
\(root\)
:第一个分组,匹配文本中的root
。括号()
表示这是一个分组,可以在替换时引用。
\(.*\)
:第二个分组,匹配任意字符(.
)任意次数(*
),即匹配root
和bash
之间的任意内容。
\(bash\)
:第三个分组,匹配文本中的bash
。
\3\2\1
:替换后的内容。
管道符号:|
表示将前一个命令的输出作为下一个命令的输入。
这个命令通过使用sed
的正则表达式替换功能,将每一行中root
和bash
之间的内容进行了重新排序。\1
、\2
、\3
分别表示匹配到的分组内容,使得替换操作更加灵活和强大。

优网科技,优秀企业首选的互联网供应服务商
优网科技秉承"专业团队、品质服务" 的经营理念,诚信务实的服务了近万家客户,成为众多世界500强、集团和上市公司的长期合作伙伴!
优网科技成立于2001年,擅长网站建设、网站与各类业务系统深度整合,致力于提供完善的企业互联网解决方案。优网科技提供PC端网站建设(品牌展示型、官方门户型、营销商务型、电子商务型、信息门户型、DIY体验、720全景展厅及3D虚拟仿真)、移动端应用(手机站、APP开发)、微信定制开发(微信官网、微信商城、企业微信)、微信小程序定制开发等一系列互联网应用服务。