Sed常用功能个人整理

2019.06.24 10:23:41字数 240阅读 15

Sed对1G以下的数据效率很高这里介绍一些个人在工作中遇到的sed问题

  • 1.查找字段

以文章test.txt为例:

ID        type         old  new
A01_1 1_34189552 0|0 0|0
A01_2 1_65117762 1|0 1|0
A01_3 1_70543349 0|0 0|0
A01_4 1_77765794 0|1 0|1
A01_5 1_109674087 0|1 0|1
A01_6 1_194530914 0|0 0|0
A01_7 1_224812701 0|0 0|0
A01_8 2_3645429 1|0 1|0
A01_9 2_21527764 0|0 0|0
A01_10 2_28792335 0|0 0|0
A01_11 2_142074734 0|0 0|0

单个查找,查找字段以p结尾,例如:

sed -n '/77765794/p' test.txt
>结果:
A01_9672 1_77765794 0|1 0|1
* 若不加n则会输出 查询结果+test.txt文本内容(与-e输出相同):
ID type old new
A01_1 1_34189552 0|0 0|0
A01_2 1_65117762 1|0 1|0
A01_3 1_70543349 0|0 0|0
A01_4 1_77765794 0|1 0|1
A01_4 1_77765794 0|1 0|1#会输出两次
A01_5 1_109674087 0|1 0|1
A01_6 1_194530914 0|0 0|0
A01_7 1_224812701 0|0 0|0
A01_8 2_3645429 1|0 1|0
A01_9 2_21527764 0|0 0|0
A01_10 2_28792335 0|0 0|0
A01_11 2_142074734 0|0 0|0

指定行输出
*sed -n 'star,end p' file 包含star和end行,$表示尾行

sed -n '1p' test.txt
ID type old new sed -n '1,2p' test.txt
ID type old new
A01_1 1_34189552 0|0 0|0 sed -n '1p;3p' test.txt # 输出多行
sed -n '{1p;3p}' test.txt # 用分号来隔离多个操作(如果有定址条件,则应该使用{ }括起来)
ID type old new
A01_2 1_65117762 1|0 1|0

多个查找,以 ‘\|’ 分割关键字

sed -n '/34189552\|70543349/p' test.txt
结果如下:
A01_1 1_34189552 0|0 0|0
A01_3 1_70543349 0|0 0|0
*这里必须加''引号,不然不返回任何值

前后替换

sed -e 's/1_109674087/_&_/' test.txt # 用&替代整个查找字符串
ID type old new
A01_1 1_34189552 0|0 0|0
A01_2 1_65117762 1|0 1|0
A01_3 1_70543349 0|0 0|0
A01_4 1_77765794 0|1 0|1
A01_5 _1_109674087_ 0|1 0|1
A01_6 1_194530914 0|0 0|0
A01_7 1_224812701 0|0 0|0
A01_8 2_3645429 1|0 1|0
A01_9 2_21527764 0|0 0|0
A01_10 2_28792335 0|0 0|0
A01_11 2_142074734 0|0 0|0

*注意Linux下shell的正则表达式与python支持的字符有所不同

正则表达式支持情况

  • 2.替换字段

s/被替换内容/替换内容/

sed -e 's/1_65117762/2_222/' test.txt
*这里使用-n不输出,需要使用-e
ID type old new
A01_1 1_34189552 0|0 0|0
A01_2 2_222 1|0 1|0 # 不会出现两次,直接显示替换的内容
A01_3 1_70543349 0|0 0|0
A01_4 1_77765794 0|1 0|1
A01_5 1_109674087 0|1 0|1
A01_6 1_194530914 0|0 0|0
A01_7 1_224812701 0|0 0|0
A01_8 2_3645429 1|0 1|0
A01_9 2_21527764 0|0 0|0
A01_10 2_28792335 0|0 0|0
A01_11 2_142074734 0|0 0|0

替换两个字符中间的内容
*这里需要使用 -r:启用扩展的正则表达式,若与其他选项一起使用,应作为首个选项

sed -r  's/(A01_11).*(0|0)/\1 2_222 \2/g' test.txt
*这里的\1 代指第一个括号的内容 \2代指第二个括号的内容
结果如下:
ID type old new
A01_1 1_34189552 0|0 0|0
A01_2 1_65117762 1|0 1|0
A01_3 1_70543349 0|0 0|0
A01_4 1_77765794 0|1 0|1
A01_5 1_109674087 0|1 0|1
A01_6 1_194530914 0|0 0|0
A01_7 1_224812701 0|0 0|0
A01_8 2_3645429 1|0 1|0
A01_9 2_21527764 0|0 0|0
A01_10 2_28792335 0|0 0|0
A01_11 2_222 0 # 将最后一个中间字符改为' 2_222 '

指定需要替换的行和第几个

sed -e '2s/0/o/3' test.txt
将第2行第3个0替换成o
ID type old new
A01_1 1_34189552 0|o 0|0 # 0被替换成了o
A01_2 1_65117762 1|0 1|0
A01_3 1_70543349 0|0 0|0
A01_4 1_77765794 0|1 0|1
A01_5 1_109674087 0|1 0|1
A01_6 1_194530914 0|0 0|0
A01_7 1_224812701 0|0 0|0
A01_8 2_3645429 1|0 1|0
A01_9 2_21527764 0|0 0|0
A01_10 2_28792335 0|0 0|0
A01_11 2_142074734 0|0 0|0
  • 3.删除字段

删除字段需要使用关键字d,sed -e /内容/d file

sed -e ' /1_34189552/d' test.txt
结果如下:
ID type old new
A01_2 1_65117762 1|0 1|0
A01_3 1_70543349 0|0 0|0
A01_4 1_77765794 0|1 0|1
A01_5 1_109674087 0|1 0|1
A01_6 1_194530914 0|0 0|0
A01_7 1_224812701 0|0 0|0
A01_8 2_3645429 1|0 1|0
A01_9 2_21527764 0|0 0|0
A01_10 2_28792335 0|0 0|0
A01_11 2_142074734 0|0 0|0

指定行删除

sed -e '$d' test.txt
*注意有些表达式可以不加''引号,带有正则的表达式必须加引号
ID type old new
A01_1 1_34189552 0|0 0|0
A01_2 1_65117762 1|0 1|0
A01_3 1_70543349 0|0 0|0
A01_4 1_77765794 0|1 0|1
A01_5 1_109674087 0|1 0|1
A01_6 1_194530914 0|0 0|0
A01_7 1_224812701 0|0 0|0
A01_8 2_3645429 1|0 1|0
A01_9 2_21527764 0|0 0|0
A01_10 2_28792335 0|0 0|0

其他操作

删除所有空行
sed '/^$/d' a.txt
删除多行
sed '/2_28792335/d;/2_3645429/d' a.txt
 
 

0人点赞

 

Sed常用功能个人整理的更多相关文章

  1. IOS开发-OC学习-常用功能代码片段整理

    IOS开发-OC学习-常用功能代码片段整理 IOS开发中会频繁用到一些代码段,用来实现一些固定的功能.比如在文本框中输入完后要让键盘收回,这个需要用一个简单的让文本框失去第一响应者的身份来完成.或者是 ...

  2. ROS(indigo)机器人操作系统学习资料和常用功能包汇总整理(ubuntu14.04LTS)

    ROS(indigo)机器人操作系统学习资料和常用功能包汇总整理(ubuntu14.04LTS) 1. 网站资源: ROSwiki官网:http://wiki.ros.org/cn GitHub    ...

  3. linux 常用命令--------雪松整理

    linux 常用命令--------雪松整理 博客: http://hi.baidu.com/quanzhou722/blog错误在所难免,还望指正!========================= ...

  4. .NET平台常用的框架整理

    基于.NET平台常用的框架整理 DotNet | 2016-03-31 17:13 (点击上方蓝字,可快速关注我们) 来源:天使不哭 链接:http://www.cnblogs.com/hgmyz/p ...

  5. iOS 常用三方类库整理

    iOS 常用三方类库整理 1:基于响应式编程思想的oc 地址:https://github.com/ReactiveCocoa/ReactiveCocoa 2:hud提示框 地址:https://gi ...

  6. JavaScript 常用功能总结

    小编吐血整理加上翻译,太辛苦了~求赞! 本文主要总结了JavaScript 常用功能总结,如一些常用的JS 对象,基本数据结构,功能函数等,还有一些常用的设计模式. 目录: 众所周知,JavaScri ...

  7. 常用js方法整理common.js

    项目中常用js方法整理成了common.js var h = {}; h.get = function (url, data, ok, error) { $.ajax({ url: url, data ...

  8. Keil的使用方法 - 常用功能(二)

    Ⅰ.概述 上一篇文章是总结关于Keil使用方法-常用功能(一),关于(文件和编译)工具栏每一个按钮的功能描述和快捷键的使用. 我将每一篇Keil使用方法的文章都汇总在一起,回顾前面的总结请点击下面的链 ...

  9. 项目中常用功能,如:流媒体、健康数据(步数等)等-b

    整理iOS开发中使用的各种流媒体和常用的高级功能.由于时间关系,目前只写了一部分功能,全部都采用的是系统方法,没用第三方,截图如下: screen1.png screen2.png 个人比较懒,不爱多 ...

随机推荐

  1. 学习WEB前端是应该自学还是参加培训机构?

    先说观点,我强烈建议每个人都要自学,不要参加培训班. 我干web前端工程师这个职位已经有6年多的时间,之前在蚂蚁金服做过2年,后来离开是因为加班实在熬不住才走的,像这些已经上市的互联网公司几乎没有不加 ...

  2. redhat7.6 更换 centos7 YUM

    使用yum 遇到如下错误. This system is not registered to Red Hat Subscription Management. You can use subscrip ...

  3. Linux/Unix 常用的 15 类别名(alias)

    背景 最近在整理 Linux 运维基线,整理记录下常用的 alias 设置. alias alias 命令用于设置指令的别名.用于简化较长的命令. 语法 alias [别名]=[指令名称] 示例:al ...

  4. OO第四单元与全课程总结

    OO第四单元与全课程总结 一.作业代码架构设计 1.第一次作业 作业类图如下: 具体架构设计: 第一次作业的全部查询工作都是和类图有关,需要解决的主要问题就是如何解析原有UML类图数据的结构,并形成自 ...

  5. MyBatisPlus入门学习

    目录 MyBatisPlus 概述 快速入门 配置日志输出 CRUD拓展 插入 主键生成策略 更新操作 自动填充 乐观锁 查询操作 分页查询 删除操作 逻辑删除 性能分析插件 条件构造器 代码自动生成 ...

  6. 1. Robot Framework入门

    RF定义: 通用型的 自动测试框架, 绝大部分的软件的的自动化系统都可以采用它. 特点: 测试数据文件(Test Data)对应一个个的测试用例.测试数据文件里面使用的功能小模块叫关键字,由测试库(T ...

  7. 05- web网站链接测试与XENU工具使用

    什么是链接 链接也叫超链接,是指从某一个网页元素指向另一个目标的连接关系,这个目标可以是另一个网站的网页,可以是本网站的一个网页,可以使同一个网页的不同位置,还可以是一个图片,一个视频,一个文件甚至是 ...

  8. table边框完全去掉的方法

    表格中边框的显示 只显示上边框 <table frame=above> 只显示下边框 <table frame=below> 只显示左.右边框 <table frame= ...

  9. 华为USG6000V防火墙简单配置案例

    如图,PC1是企业内网用户,要通过防火墙NAT方式( 1.1.1.105-1.1.1.106 )访问Internet,Server是企业的FTP服务器,通过静态NAT方式供外网用户访问,对外的地址是1 ...

  10. Linux运维比较常用的一些脚本

    目录 一.根据PID过滤进程所有信息 二.根据进程名过滤进程信息 三.根据用户名查询该用户的相关信息 四.加固系统的一些配置 五:实现磁盘分区的 六.使用一整块硬盘创建逻辑卷 七.将一块硬盘分区,然后 ...