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. 常用Linux操作

    常用Linux操作 这里我使用的是Git进行的Linux操作,如果你有服务器.或者LInux系统可以直接尝试 首先保证自己电脑上成功安装好了Git,右键鼠标: 随便找一个文件夹(我这里使用的是桌面的G ...

  2. Android Studio的基本开发环境,配置阿里云源

    原创文章,转发请注明出处. 安装Android Studio 安装文件下载地址:https://developer.android.google.cn/studio/ 下载Gradle 由于国内的网络 ...

  3. thinkphp添加excel更新数据表数据(优化篇)

    由于主管说使用saveAll更新数据效率太低,要改用sql语句一次执行现在修改 /** * excel开启上传 * author: panzhide * @return array * Date: 2 ...

  4. Leedcode算法专题训练(数学)

    204. 计数质数 难度简单523 统计所有小于非负整数 n 的质数的数量. class Solution { public int countPrimes(int n) { boolean[] is ...

  5. Spring @Value注入static属性

    import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Com ...

  6. Andy‘s First Dictionary UVA - 10815

      Andy, 8, has a dream - he wants to produce his very own dictionary. This is not an easy task for h ...

  7. .Net Core 集成 Kafka

    最近维护的一个系统并发有点高,所以想引入一个消息队列来进行削峰.考察了一些产品,最终决定使用kafka来当做消息队列.以下是关于kafka的一些知识的整理笔记. kafka kafka 是分布式流式平 ...

  8. 1.7.1- HTML表格table

    存在即是合理的,表格的是一种常用的标签,不是用来布局,常见是用处理 适合用表格table的地方: 创建表格:

  9. 分布式任务调度系统:xxl-job

    任务调度,通俗来说实际上就是"定时任务",分布式任务调度系统,翻译一下就是"分布式环境下定时任务系统". xxl-job一个分布式任务调度平台,其核心设计目标是 ...

  10. POJ 1679 判断最小树是否唯一

    题意:       给你一个图,问你最小树是否唯一,唯一则输出最小数的权值,不唯一输出Not Unique! 思路:      题目问的是最小树是否唯一,其实也就是在问次小树是否等于最小树,如果等于则 ...