sed -n '/^hgds/,/^yarn/p' /etc/passwd 打印/etc/passwd文件中匹配以hgds开头的行,到yarn开头的行结束
10,/pattern1/command 匹配从第10行开始,到匹配到pattern1的行结束
sed -n '4,/^hdfs/p' /etc/passwd 匹配/etc/passwd文件中,从第4行开始,直到hdfs开头的行结束
/pattern1/,10command 匹配到pattern1的行开始,到第10行匹配结束
sed -n '/root/, 10p' /etc/passwd 匹配/etc/passwd文件中,以root开头的行,到第10行结束
sed中编辑命令command详解
查询
p 打印
增加
a 行后追加
sed -i '/\bin\/bash/a This is user which can login to system' file 匹配file文件中,以/bin/bash的行,并在行后追加This is user which can login to system这句
i 行前打印
sed -i '/^hdfs/,/^yarn/i aaa' file 匹配file文件中,以hdfs开头的到yarn开头的行结束,并在匹配的行前追加aaa
r 外部文件读入,行后追加
sed -i '/root/r read.file' file 匹配file文件中,读取read.file的内容追加到,以root开头的行后
w 匹配行写入外部文件
sed -i '/\bin\/bash/w writefile.txt' file 将匹配file文件中, 以/bin/bash的行另存到writefile.txt文件中
删除
d 删除
sed '1d' file 删除file文件第一行
sed '1,3d' file 删除file文件第一行到第三行
sed -i '/\/sbin\/nologin/d' file 删除file文件,匹配/sbin/nologin的行
sed -i '/^mail/,/^ftp/d file' 删除file文件中,匹配以mail开头的行,直到ftp开头的行结束
sed -i '/^[:blank:]*#/d,/^$/d' /etc/nginx.conf 删除/etc/nginx.conf文件中,空格和注释行
修改
s/old/new 将行内第一个old替换为new
sed -i 's/root/ROOT' file 匹配file文件中,替换第一个以root的行为ROOT
s/old/new/g 将行内全部的old替换为new
sed -i 's/\/bin\/bash/\/BIN\/BASH/g' file 匹配file文件中,将所有/bin/bash替换成/BIN/BASH的行
s/old/new/2g 将行内从第2个开始,到剩下所有的old替换为new
sed -i 's/root/ROOT/2g' file 匹配file文件中,同一行内替换以第二个root的行到剩下所有的内容为ROOT
s/old/new/ig 将行内old全部替换为new,忽略大小写
sed -i 's/root/ROOT/ig' file 匹配file文件中,同一行内,所有以root的行,并替换为ROOT,不区分大小写
sed -i 's/^[^#]/\*&/g' etc/nginx.conf
示例
# 修改/etc/passwd中第一行第一个root为ROOT
sed -i '1s/root/ROOT' /etc/passwd
# 修改/etc/passwd中第5行到第10行中所有的/sbin/nologin为/bin/bash
sed -i '5,10s/\/sbin\/nologin/\/bin\/bash/g' /etc/passwd
# 修改/etc/passwd中匹配到/sbin/nologin的行,将匹配到行的login改为大写的LOGIN
sed -i '/\/sbin\/nologin/s/login/LOGIN' /etc/passwd
# 修改/etc/passwd中从匹配以root开头的行,到匹配到行中包含mail的所有行,修改内容为将这些所有匹配到的行的bin改为HADOOP
sed -i '/^root/, /mail/s/bin/HADOOP/g' /etc/passwd
# 修改/etc/passwd中匹配以root开头的行,到第15行中所有的行,修改内容为将这些行中的bin改为HADOOP
sed -i '/root/,15s/bin/HADOOP/g' /etc/passwd
# 修改/etc/passwd中从第15行开始,到匹配到yarn开头的所有行,修改内容为将这些行中的bin改为HADOOP
sed -i '15,/^yarn/s/bin/HADOOP/g' /etc/passwd
# 在/etc/passwd文件每一行前面追加Insert Line Before Every Line
sed -i 'i Insert Line Before Every Line' /etc/passwd
其他命令
= 显示行号
sed -n '/\sbin\/nologin/=' file 匹配file文件中,以/sbin/nologin的行号
反向引用
sed -i 's/had..p/&s/g' file 匹配file文件中,匹配had开始,已p结尾的字符,并在匹配的字符串后面加个s
sed -i 's/\(had..p\)/\1s/g' file 匹配file文件中,匹配had开始,已p结尾的字符,并在匹配的字符串后面加个s
sed -i 's/\(had\).../\1doop' file
sed中引用变量注意事项
匹配模式中存在变量,建议使用双引号
sed中需要引入自定义变量时,如果外面使用单引号,则自定义变量必须使用单引号
#!/bin/bash
old_str=hadoop
new_str=HADOOP
sed -i "s/$old_str/$new_str/g" test.txt
# 方法二
sed -i 's/'$old_str'/'$new_str'/g' test.txt
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构