标签:oldboy xiaoming 正则表达式 学习 person sed txt root
sed
sed是一个流编辑器,非交互式的编辑器,它一次处理一行内容.
处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space)
接着用 sed 命令处理缓冲区的内容,处理完成后,把缓冲区的内容送往屏幕。
接着处理下一行,这样不断重复,直到文件末尾。
文件内容并没有改变,除非你使用重定向存储输出。
sed 要用来自动编辑一个或多个文件;简化对文件的反复操作;编写装换程序等
sed 增加 修改 查找 删除 增删改查
#查
sed单行查询
sed多行查询(地址范围)
sed过滤功能
#增
sed单行增加
sed多行增加
sed增加案例
#删
sed删除功能及案例
#改
sed文本替换
sed变量替换
sed反向引用
sed替换案例
sed执行多条语句
获取文件行号
1.sed语法格式
sed [选项] [sed指令] [输入文件]
2.sed命令执行流程
3.创建测试文件
cat >person.txt<<EOF 101,oldboy,CEO 102,zhangyao,CTO 103,Alex,COO 104,yy,CFO 105,feixue,CIO EOF
4.查询单行文本p 显示某一行
p sed指定,打印模式空间内容 -n sed选项,取消默认输出 [root@xiaoming ~]# sed '1p' person.txt 101,oldboy,CEO 101,oldboy,CEO 102,zhangyao,CTO 103,Alex,COO 104,yy,CFO 105,feixue,CIO [root@xiaoming ~]# sed '1p' person.txt -n 101,oldboy,CEO #显示文件最后一行 [root@xiaoming ~]# sed '$p' person.txt -n 105,feixue,CIO
5.查询连续多行文本,显示连续的多行,从哪里来到哪里去'1,4p'
指定p前面没有地址范围,那么默认匹配所有行
#数字地址范围--推荐 行号 #2,4 显示第二行到第四行的内容,包含第二行和第四行 [root@xiaoming ~]# sed '2,4p' person.txt -n 102,zhangyao,CTO 103,Alex,COO 104,yy,CFO ##正则地址范围-模糊,容易找多了 [root@xiaoming ~]# sed -n '/oldboy/p' person.txt 101,oldboy,CEO [root@xiaoming ~]# sed -n '/o.*y/p' person.txt 101,oldboy,CEO [root@xiaoming ~]# sed -n '/o.*y/,/105/p' person.txt 101,oldboy,CEO 102,zhangyao,CTO 103,Alex,COO 104,yy,CFO 105,feixue,CIO ##显示这个文件的第一行到第四行 [root@xiaoming ~]# sed -n '1,4p' person.txt ##从包含101的这一行,显示到包含104的这一行 [root@xiaoming ~]# sed -n '/101/,/104/p' person.txt 101,oldboy,CEO 102,zhangyao,CTO 103,Alex,COO 104,yy,CFO
sed查询功能对比grep
1.都是基于行为单位
2.都支持正则
3.sed可以做指定查询范围,grep不行
6.过滤多个字符串
-r sed选项,支持扩展正则表达式(|()) 默认情况,sed只支持基本正则表达式。 [root@xiaoming ~]# egrep 'oldboy|yy' person.txt 101,oldboy,CEO 104,yy,CFO [root@xiaoming ~]# sed -rn '/oldboy|yy/p' person.txt 101,oldboy,CEO 104,yy,CFO sed里面的正则字符左右必须有"/"。/oldboy/ 重点: sed 查询单行文本 查询多行文本 使用数字地址范围sed '2,4p' person.txt -n
7.查询指定多行
使用分号
[root@xiaoming ~]# sed -n '1p;3p;5p' person.txt 101,oldboy,CEO 103,Alex,COO 105,feixue,CIO
8.增加单行文本a,i
我想向person.txt文件中追加2行 106,lidao,UFO 107,bingbing,CEO
方法一:cat cat >>person.txt <<EOF 106,lidao,UFO 107,bingbing,CEO EOF 方法二:echo [root@xiaoming ~]# echo "asda > asdas > asdas" asda asdas asdas [root@xiaoming ~]# echo "106,lidao,UFO\n107,bingbing,CEO" 106,lidao,UFO\n107,bingbing,CEO person.txt [root@xiaoming ~]# echo -e "106,lidao,UFO\n107,bingbing,CEO" 106,lidao,UFO 107,bingbing,CEO person.txt
方法三:sed命令 #在第2行后面加入一个新行,内容为 oldboy.com [root@xiaoming ~]# sed '2a oldboy.com' person.txt 101,oldboy,CEO 102,zhangyao,CTO oldboy.com 103,Alex,COO [root@xiaoming ~]# sed '2i oldboy.com' person.txt 101,oldboy,CEO oldboy.com 102,zhangyao,CTO a append 追加 i insert 插入
#在最后一行后面追加2行内容 [root@xiaoming ~]# sed '$a 106,lidao,UFO\n107,bingbing,CEO' person.txt 101,oldboy,CEO 102,zhangyao,CTO 103,Alex,COO 104,yy,CFO 105,feixue,CIO 106,lidao,UFO 107,bingbing,CEO
9.删除文件内容d
d sed指令,删除文本内容 $ 代表文件最后一行 #删除第一行 [root@xiaoming ~]# sed '1d' person.txt 102,zhangyao,CTO 103,Alex,COO 104,yy,CFO 105,feixue,CIO 106,lidao,UFO 107,bingbing,CEO
#显示文件内容但不包含第一行 方法一: [root@xiaoming ~]# grep -v 'oldboy' person.txt 方法二: [root@xiaoming ~]# sed '/oldboy/d' person.txt 方法三: [root@xiaoming ~]# awk '!/oldboy/' person.txt
10.修改文件内容c
禁用SELINUX sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config sed -i "7c SELINU=disabledX" /etc/selinux/config sed -i "/^SELINU=/ SELINU=disabledX" /etc/selinux/config
11.文本替换
's/old/new/g' 's@@@g' 's###g' s/\/etc/hosts/\/etc/hosts.bak/g s#/etc/hosts#/etc/hosts.bak#/g [root@xiaoming ~]# cat person.txt 101,oldboy,CEO 102,zhangyao,CTO 103,Alex,COO 104,yy,CFO 105,feixue,CIO [root@xiaoming ~]# sed 's#[0-9]#oldboy#g' person.txt oldboyoldboyoldboy,oldboy,CEO oldboyoldboyoldboy,zhangyao,CTO oldboyoldboyoldboy,Alex,COO oldboyoldboyoldboy,yy,CFO oldboyoldboyoldboy,feixue,CIO [root@xiaoming ~]# sed 's#[0-9]##g' person.txt ,oldboy,CEO ,zhangyao,CTO ,Alex,COO ,yy,CFO ,feixue,CIO
案例:随机取出10位连续小写字符的字符串
openssl rand -base64 123 | sed 's#[^a-z]##g'| head -c 10
###-i 自动备份功能,先备份,在修改文件内容 [root@xiaoming ~]# sed -ri.bak 's#[0-9]#oldboy#' person.txt [root@xiaoming ~]# ll 总用量 24 -rw-r--r-- 1 root root 137 1月 7 22:14 person.txt -rw-r--r-- 1 root root 102 1月 7 21:22 person.txt.bak
标签:oldboy,xiaoming,正则表达式,学习,person,sed,txt,root 来源: https://www.cnblogs.com/xmtxh/p/12164139.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。