一、特点及格式
sed stream editor 流编辑器,sed把处理的内容(文件),当做水流他,源源不断的进行处理,直到文件末尾。
sed格式:
| 命令 | 选项(s)sed命令功能(g)修饰符 | 参数(文件) |
|---|---|---|
| sed | -r ‘s#oldboy#oldgire#g’ | oldboy.txt |
sed命令核心功能 增删改查:
| 功能 | |
|---|---|
| s | 替换subsitute sub |
| p | 显示print |
| d | 删除delete |
| cai | 增加c/a/i |
二、sed命令执行过程
四个字描述:找谁干啥
找谁:你要哪一行
干啥:增删改查
三、sed核心应用
1)sed 查找p
| 查找格式: | |
|---|---|
| ‘1p’ ‘3p’ | 指定行号查找 |
| ‘1,5p’ | 指定行号范围查找 |
| ‘/lidao/p’ | 类似grep过滤,//里面可以写正则 |
| ‘/10:00/,/11:00/p’ | 表示范围过滤 |
| -n | 取消默认输出,默认输出文件全部内容 |
| $p | 表示最后一行 |
--> sed -n '3p' 1.txt
103,lidao,CFO
--> sed -n '1,3p' 1.txt
101,oldboy,CEO
102,zhangyao,CTO
103,lidao,CFO
$p 表示最后一行
--> sed -n '3,$p' 1.txt
103,lidao,CFO
104,yy,cfo
110,yuyan,COCO
--> sed -n '/oldboy/p' 1.txt
101,oldboy,CEO
--> sed -n '/10/p' 1.txt
101,oldboy,CEO
102,zhangyao,CTO
103,lidao,CFO
104,yy,cfo
110,yuyan,COCO
--> sed -n '/[45]/p' 1.txt
104,yy,cf
扩展正则要加-r
--> sed -nr '/[0-9]+/p' 1.txt
101,oldboy,CEO
102,zhangyao,CTO
103,lidao,CFO
104,yy,cfo
110,yuyan,COCO
--> sed -nr '/[0-9]{3}/p' 1.txt
101,oldboy,CEO
102,zhangyao,CTO
103,lidao,CFO
104,yy,cfo
110,yuyan,COCO
注:sed命令,表示范围过滤的时候,如果结尾的内容匹配不到就是一直显示到最后一行。
2)sed 删除d
| 查找格式: | |
|---|---|
| ‘1d’ ‘3d’ | 指定行号删除 |
| ‘1,5d’ | 指定行号范围删除 |
| ‘/lidao/d’ | 类似grep过滤,//里面可以写正则 |
| ‘/10:00/,/11:00/d’ | 表示范围删除 |
删除文件中的空行和包含#的行
egrep -v '^$|#' 1.txt
sed -r '/^$|#/d' 1.txt
3)sed 增加 cai
| 命令 | 含义 |
|---|---|
| c | replace 替代这行的内容 |
| a | append 向指定的行或者每一行追加内容(会显示在下一行) |
| i | insert插入,向指定的行或者每一行插入内容(行前面)(会显示在上一行) |
-->sed '3a 996,lidao,996' 1.txt
101,oldboy,CEO
102,zhangyao,CTO
103,lidao,CFO
996,lidao,996
104,yy,cfo
110,yuyan,COCO
-->sed '3i 996,lidao,996' 1.txt
101,oldboy,CEO
102,zhangyao,CTO
996,lidao,996
103,lidao,CFO
104,yy,cfo
110,yuyan,COCO
-->sed '3c 996,lidao,996' 1.txt
101,oldboy,CEO
102,zhangyao,CTO
996,lidao,996
104,yy,cfo
110,yuyan,COCO
4) sed 替换s
格式 s///g;s###g
g – global 全局替换,不加g只替换每行第一个
--> sed 's/[0-9]//g' 1.txt
,oldboy,CEO
,zhangyao,CTO
,lidao,CFO
,yy,cfo
,yuyan,COCO
--> sed 's/[0-9]//' 1.txt
01,oldboy,CEO
02,zhangyao,CTO
03,lidao,CFO
04,yy,cfo
10,yuyan,COCO
后向应用,先保护起来再使用。
--> echo 12345 | sed -r 's/12345/<12345>/g'
<12345
--> echo 12345 | sed -r 's/(.*)/<\1>/g'
<12345>
--> echo oldboy_lidao | sed -r 's/(^.*)_(.*$)/\2_\1/g'
lidao_oldboy
--> echo oldboy_lidao | sed -r 's/(^[a-z]+)_([a-z]+$)/\2_\1/g'
lidao_oldboy
##特殊字符符号 \w == [0-9a-zA-Z]
--> echo oldboy_lidao | sed -r 's/(^\w+)_(\w+$)/\2_\1/g'
lidao_oldbo
--> ip a s lo | sed -n '3p'
inet 127.0.0.1/8 scope host lo
--> ip a s lo | sed -n '3p' | sed -r 's/(.*t )(.*)(\/.*$)/\1/g'
inet
.*是贪婪匹配,想要取ip就需要再t 这里停住,所以第一个中结束是t(空格)
--> ip a s lo | sed -n '3p' | sed -r 's/(.*t )(.*)(\/.*$)/\2/g'
127.0.0.1
精简:
--> ip a s lo | sed -nr '3s/(.*t )(.*)(\/.*$)/\2/gp'
127.0.0.1
读取文件权限
--> stat 1.txt
File: 1.txt
Size: 109 Blocks: 96 IO Block: 524288 regular file
Device: 2000/2097 Inode: 1474 Links: 1
Access: (0664/-rw-rw-r--) Uid: (1886/yuha) Gid: (2032/ nba)
Access: 2023-11-20 03:05:36.876870000 -0500
Modify: 2023-11-20 03:05:36.876870000 -0500
Change: 2023-11-20 03:05:36.876870000 -0500
Birth: -
--> stat 1.txt | sed -n '4p'
Access: (0664/-rw-rw-r--) Uid: (1886/yuha) Gid: (2032/ nba
--> stat 1.txt | sed -n '4p' | sed -r 's/.*\(0(.*)\/-.*/\1/g'
664
--> stat 1.txt | sed -nr '4s/.*\(0(.*)\/-.*/\1/gp'
664
--> stat -c%a 1.txt
664
注:先查看命令帮助,是否可以通过命令直接获取自己想要的格式,如果没有再通过sed处理。
四、总结
四个字描述:找谁干啥
找谁:你要哪一行
干啥:增删改查
1166

被折叠的 条评论
为什么被折叠?



