Linux三剑客之sed

  参考:https://www.cnblogs.com/ftl1012/p/9250171.html

     https://www.runoob.com/linux/linux-comm-sed.html

  sed是一种流编编器,它是文本处理中非常中的工具,能够完美的配合正则表达式便用,功物能不同凡响。

处理时,把当前处理的行存储在临时缓冲区中,称为”模式空间”( oattern space),接看用sed命令处理缓冲区中的内容,处理成后,把缓冲区的内容送往屏幕显示。

接着理下一行,这样不断重复,直到文件末。文件内容没有改改变,除非使用了写入的命令,将内容更新。

定址用于决定对哪些行进行编辑。地址的形式可以是数字、正则表达式、或二者的结合。如果没有指定地址,sed将处理输入文件的所有行。

  sed功能命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
命令  功能
a\  在当前行后添加一行或多行。多行时除最后一行外,每行末尾需用“\”续行
  
c\  用此符号后的新文本替换当前行中的文本。多行时除最后一行外,每行末尾需用"\"续行
  
i\  在当前行之前插入文本。多行时除最后一行外,每行末尾需用"\"续行
  
d   删除行
  
h   把模式空间里的内容复制到暂存缓冲区
  
H   把模式空间里的内容追加到暂存缓冲区
  
g   把暂存缓冲区里的内容复制到模式空间,覆盖原有的内容
  
G   把暂存缓冲区的内容追加到模式空间里,追加在原有内容的后面
  
l   列出非打印字符
  
p   打印行
  
n   读入下一输入行,并从下一条命令而不是第一条命令开始对其的处理
  
q   结束或退出sed
  
r   从文件中读取输入行
  
!   对所选行以外的所有行应用命令
  
s   用一个字符串替换另一个
  
g   在行内进行全局替换
  
w   将所选的行写入文件
  
x   交换暂存缓冲区与模式空间的内容
  
y   将字符替换为另一字符(不能对正则表达式使用y命令)

   sed常见命令参数

1
2
3
4
5
6
7
p==print
d:delete
=:打印匹配行的行号
-n 取消默认的完整输出,只要需要的 
-e 允许多项编辑
-i 修改文件内容
-r 不需要转义

   演示使用文件/etc/passwd

  只查看文件的第3行

1
2
# sed -n '3p' passwd
bin:x:2:2:bin:/bin:/usr/sbin/nologin

   PS:需要加参数-n如果不加会在屏幕输出文件所有内容

  只查看第3行到9行

1
2
3
4
5
# sed  -n '3,6p' passwd
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin

   打印最后一行

1
2
#sed -n '$p' passwd
xrdp:x:126:131::/var/run/xrdp:/usr/sbin/nologin

  过滤指定字符串,显示正行内容,例如过滤出root

1
2
# sed  -n "/root/p" passwd
root:x:0:0:root:/root:/bin/bash

   PS:过滤字符串使用//包含p代表打印输出

  仅显示被匹配字符串的行号

1
2
#sed -n '/root/=' passwd
1

   打印匹配的内容和行号,相当于又根据关键词查询了一次

1
2
3
sed -n -e '/root/p' -e '/root/=' passwd
root:x:0:0:root:/root:/bin/bash
1

   PS:-e允许多项编辑

  在文件的某行后增加一行

1
#sed   4a\newline passwd

   会在第4行新增一行后再输出所有

  如果使用参数-n则只在屏幕输出增加的行newline

  删除行

1
#sed   '1,10d' passwd

   删除1至10行把剩下的行输出至屏幕

  数据搜索并删除

  删除包含root的行

1
#sed  '/root/d' passwd

   数据的搜索并替换

  格式如下

1
sed 's/要被替换的字符串/新的字符串/g'

   把root字符串替换成admin

1
sed 's/root/admin/g' passwd

   文件的修改

  加参数 -i直接修改文件(危险操作慎用)

  把root替换成admin并且直接修改文件,直接修改屏幕无输出

1
sed 's/root/admin/g' passwd -i

   如果只是需要替换某一行的在s前面加行号例如

  把第1行的root替换成admin,如果其他行包含root则不会替换

1
sed '1s/root/admin/g' passwd -i

 

posted @   minseo  阅读(313)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
历史上的今天:
2018-09-10 怎么关闭win10防火墙
点击右上角即可分享
微信分享提示