linux sed命令(每日一学)
Posted ShawHe
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux sed命令(每日一学)相关的知识,希望对你有一定的参考价值。
第1章 sed基础
1.1 sed的选项
-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文件
[[email protected] 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
[[email protected] 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
[[email protected] 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
[[email protected] 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
[[email protected] lx]# sed ‘$a12306,xiao,UFO 12580,tao,XO‘ person.txt $最后一行 回车 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行
[[email protected] lx]# sed ‘2,5d‘ person.txt 101,zeq,CEO 110,ahao,COCO
2.2.2 删除从yy开始的行到文件结尾的内容
[[email protected] lx]# sed ‘/yy/,$d‘ person.txt $文件结尾 101,zeq,CEO 102,zhang,CTO 103,Love,COO
2.2.3 删除包含ahao的行
[[email protected] 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的行
[[email protected] lx]# sed ‘/ahao/!d‘ person.txt !取反,排除 110,ahao,COCO
2.3 sed 替换 ‘s###g‘
2.3.1 替换掉所有的数字
[[email protected] lx]# sed ‘s#[0-9]##g‘ person.txt ,zeq,CEO ,zhang,CTO ,Love,COO ,yy,CFO ,faker,CIO ,ahao,COCO
2.3.2 替换掉每行中的第一个数字
[[email protected] 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地址
[[email protected] ~]# ifconfig eth0 |sed -rn ‘2s#^.*r:(.*) Bc.*#1#gp‘ 10.0.0.200
[[email protected] ~]# ifconfig eth0 |awk -F‘[ :]+‘ ‘NR==2{print $4}‘ 10.0.0.200
[[email protected] ~]# ifconfig eth0 |awk -F‘addr:| Bc‘ ‘NR==2{print $2}‘ 10.0.0.200
[[email protected] ~]# ifconfig eth0 |awk -F‘[^0-9.]+‘ ‘NR==2{print $2}‘ 10.0.0.200
2.4 sed 查
2.4.1 显示文件的第5行
[[email protected] ~]# sed -n 5p person.txt 105,faker,CIO
2.4.2 显示文件的第2行到第5行
[[email protected] ~]# sed -n ‘2,5p‘ person.txt 102,zhang,CTO 103,Love,COO 104,yy,CFO 105,faker,CIO
2.4.3 显示文件最后一行
[[email protected] ~]# sed -n ‘$p‘ person.txt 110,ahao,COCO
2.4.4 显示文件中包含zeq的行
[[email protected] ~]# sed -n ‘/zeq/p‘ person.txt 101,zeq,CEO
2.4.5 显示文件中从包含101的行到105的行
[[email protected] ~]# 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行
[[email protected] ~]# sed -n ‘1p ;4p; 5p‘ person.txt 101,zeq,CEO 104,yy,CFO 105,faker,CIO
2.4.7 显示有规律的行
[[email protected] ~]# seq 10 |sed -n ‘1~2p‘ 1 3 5 7 9
2.5 sed命令中使用变量
[email protected] ~]# x=zeq 设置x变量为zeq [[email protected] ~]# y=zeq1 设置y变量为zeq1 [[email protected] ~]# 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 命令行格式 [[email protected] data]# ls *.jpg|sed -r "s#(.*)(_.*)#mv & zeq2#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 修改谁 改为什么 修改什么文件
以上是关于linux sed命令(每日一学)的主要内容,如果未能解决你的问题,请参考以下文章