九、文本处理之sed 增删改查
- sed命令处理过程按照行为单位,一行一行的处理,直至最后一行结束
- 工作原理:sed 命令读取当前行到内存中,根据条件进行判断是否符合,若符合则输出改行,继续读下一行;若不符合条件,则直接读取下一行;一行一行的读取,直至数据最后一行,程序结束。
9.1、查询(重要)
- 命令格式:sed [选项] “条件 命令” 文件
- 选项
选项 |
解释 |
-n |
取消自动打印模式空间(原数据) 一般与p一起使用 |
-r |
使用扩展正则表达式 |
-I |
忽略大小写 |
条件 |
解释 |
n |
按行号查找 ,第n行 |
n,m |
按行号查找 ,第n—m行 |
n,+m |
按行号查找 ,第n—n+m行 |
/n/ |
按内容查找 ,包含n的行 |
/n/,/m / |
按内容查找 ,从包含n的行到包含m的行 |
$ |
最后一行 |
# s.txt 各列含义:姓名 性别 年龄 职业
cxy,male,19,stu
zzf,female,20,actor
zjm,female,22,actor
ycy,female,23,star
cxl,male,24,stu
bl,female,26,star
9.1.1、np 第n行;n,mp 第n行到m行;n,+mp 第n到n+m行 p取行
- np 打印文件的第三行数据 (-n只显示需求结果)
[hadoop1@hadoop1 test]$ sed -n '3p' s.txt
zjm,female,22,actor
[hadoop1@hadoop1 test]$ sed -n '2,4p' s.txt
zzf,female,20,actor
zjm,female,22,actor
ycy,female,23,star
[hadoop1@hadoop1 test]$ sed -n '2,+3p' s.txt
zzf,female,20,actor
zjm,female,22,actor
ycy,female,23,star
cxl,male,24,stu
[hadoop1@hadoop1 test]$ sed -n '$p' s.txt
bl,female,26,star
9.1.2、/查询内容/p 支持正则 查询包含指定内容的行
[hadoop1@hadoop1 test]$ sed -n '/cxl/p' s.txt
cxl,male,24,stu
[hadoop1@hadoop1 test]$ sed -n -r '/cxl|cxy/p' s.txt
cxy,male,19,stu
cxl,male,24,stu
[hadoop1@hadoop1 test]$ echo -e "123\n\n456\n789"
123
456
789
[hadoop1@hadoop1 test]$ echo -e "123\n\n456\n