linux-sed命令
程序员文章站
2024-02-01 17:27:52
第1章 sed基础 1.1 sed的选项 stream editor 流编辑器 -r 支持扩展正则 -n 取消默认输出 -i 直接修改不输出到桌面 -i.bak 备份 1.2 sed的书写格式 sed '条件命令' sed 'pattern命令' sed '模式命令' 1.3 sed命令执行过程 1 ......
第1章 sed基础
1.1 sed的选项 stream editor 流编辑器
-r 支持扩展正则
-n 取消默认输出
-i 直接修改不输出到桌面
-i.bak 备份
1.2 sed的书写格式
sed '条件命令'
sed 'pattern命令'
sed '模式命令'
1.3 sed命令执行过程
1.读取文件内容第1行
2.是否满足条件
1).满足条件 执行对应的命令 p s d
2).不满足 继续第1步
3.截止到文件的最后一行
第2章 sed命令的使用
sed增删改查 不加i选项只会把修改内容输出到并没有真正修改,加上i选项会直接修改文件内容
2.1 sed 增加 cai
c replace 替换
a append 追加
i insert 插入
2.1.1 在person.txt文件第三行下追加12306,xiao,ufo
查看person.txt文件
[root@zeq lx]# cat person.txt 101,zeq,ceo 102,zhang,cto 103,love,coo 104,yy,cfo 105,faker,cio 110,ahao,coco
第三行下追加12306,xiao,ufo
[root@zeq lx]# sed '3a12306,xiao,ufo' person.txt a追加,3a在第三行下追加 101,zeq,ceo 102,zhang,cto 103,love,coo 12306,xiao,ufo 104,yy,cfo 105,faker,cio 110,ahao,coco
2.1.2 在person.txt文件第三行上插入12306,xiao,ufo
[root@zeq lx]# sed '3i12306,xiao,ufo' person.txt 101,zeq,ceo 102,zhang,cto 12306,xiao,ufo 103,love,coo 104,yy,cfo 105,faker,cio 110,ahao,coco
2.1.3 把person.txt文件第三行替换成12306,xiao,ufo
[root@zeq lx]# sed '3c12306,xiao,ufo' person.txt 101,zeq,ceo 102,zhang,cto 12306,xiao,ufo 104,yy,cfo 105,faker,cio 110,ahao,coco
2.1.4 在文件最后一行增加
12306,xiao,ufo
12580,tao,xo
[root@zeq lx]# sed '$a12306,xiao,ufo\n12580,tao,xo' person.txt $最后一行 \n回车 101,zeq,ceo 102,zhang,cto 103,love,coo 104,yy,cfo 105,faker,cio 110,ahao,coco 12306,xiao,ufo 12580,tao,xo
2.2 sed 删除 d
2.2.1 删除第2行到第5行
[root@zeq lx]# sed '2,5d' person.txt 101,zeq,ceo 110,ahao,coco
2.2.2 删除从yy开始的行到文件结尾的内容
[root@zeq lx]# sed '/yy/,$d' person.txt $文件结尾 101,zeq,ceo 102,zhang,cto 103,love,coo
2.2.3 删除包含ahao的行
[root@zeq lx]# sed '/ahao/d' person.txt 101,zeq,ceo 102,zhang,cto 103,love,coo 104,yy,cfo 105,faker,cio
2.2.4 删除不包含ahao的行
[root@zeq lx]# sed '/ahao/!d' person.txt !取反,排除 110,ahao,coco
2.3 sed 替换 's###g'
2.3.1 替换掉所有的数字
[root@zeq lx]# sed 's#[0-9]##g' person.txt ,zeq,ceo ,zhang,cto ,love,coo ,yy,cfo ,faker,cio ,ahao,coco
2.3.2 替换掉每行中的第一个数字
[root@zeq lx]# sed 's#[0-9]##' person.txt sed 's#[0-9]##' 不加g,默认是匹配到每行第一个数字 sed 's#[0-9]##' 匹配每行第二个数字 01,zeq,ceo 02,zhang,cto 03,love,coo 04,yy,cfo 05,faker,cio 10,ahao,coco
2.3.3 后向引用 取出ip地址
[root@zeq ~]# ifconfig eth0 |sed -rn '2s#^.*r:(.*) bc.*#\1#gp' 10.0.0.200
[root@zeq ~]# ifconfig eth0 |awk -f'[ :]+' 'nr==2{print $4}' 10.0.0.200
[root@zeq ~]# ifconfig eth0 |awk -f'addr:| bc' 'nr==2{print $2}' 10.0.0.200
[root@zeq ~]# ifconfig eth0 |awk -f'[^0-9.]+' 'nr==2{print $2}' 10.0.0.200
2.4 sed 查
2.4.1 显示文件的第5行
[root@zeq ~]# sed -n 5p person.txt 105,faker,cio
2.4.2 显示文件的第2行到第5行
[root@zeq ~]# sed -n '2,5p' person.txt 102,zhang,cto 103,love,coo 104,yy,cfo 105,faker,cio
2.4.3 显示文件最后一行
[root@zeq ~]# sed -n '$p' person.txt 110,ahao,coco
2.4.4 显示文件中包含zeq的行
[root@zeq ~]# sed -n '/zeq/p' person.txt 101,zeq,ceo
2.4.5 显示文件中从包含101的行到105的行
[root@zeq ~]# sed -n '/101/,/105/p' person.txt 101,zeq,ceo 102,zhang,cto 103,love,coo 104,yy,cfo 105,faker,cio
2.4.6 特殊写法:显示文件的第1和4行和5行
[root@zeq ~]# sed -n '1p ;4p; 5p' person.txt 101,zeq,ceo 104,yy,cfo 105,faker,cio
2.4.7 显示有规律的行
[root@zeq ~]# seq 10 |sed -n '1~2p' 1 3 5 7 9
2.5 sed命令中使用变量
root@zeq ~]# x=zeq 设置x变量为zeq [root@zeq ~]# y=zeq1 设置y变量为zeq1 [root@zeq ~]# sed 's#$x#$y#g' person.txt 101,zeq1,ceo 102,zhang,cto 103,love,coo 104,yy,cfo 105,faker,cio 110,ahao,coco 12306,xiao.ufo
2.5.1 把文件person.txt文件中的每一行的内容 替换为对应的行号
for n in {1..7} 这里使用的shell脚本中的for循环 do sed -i.bak "${n}s#.*#$n#g" person.txt done
2.5.2 批量重命名:删除文件名中的html_
touch zeq_html_{01..10}.jpg
方法1 命令行格式 [root@zeq data]# ls *.jpg|sed -r "s#(.*)(_.*)#mv & zeq\2#g"|bash
方法2 for循环 for i in {01..10} do mv zeq_${i}.jpg zeq_html_${i}.jpg done
方法3 rename rename html_ "" *.jpg rename 修改谁 改为什么 修改什么文件
下一篇: cad怎么快速画窗户的平面图?