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. Python基础(十三):for循环

    对于一个序列,比如说:列表.字符串,有时候我们需要获取其中的每一个元素,然后执行某个操作,此时就需要借助于for循环. for循环语法结构 for循环的语法结构如下,这里大家必须清楚一点,for循环后 ...

  2. 数据库MySQL二

    注意拼接的时候如果为null则都为null 用if null 1.条件查询 2.按逻辑表达式筛选 3.模糊查询 还有not like 用转义字符\ #2.in 数值型的常量值都不用单引号,非数值型的都 ...

  3. 1.设置和验证MySQL数据库的隔离级别

    登录数据库 mysql -u root - p 新建用户,各启动一个事物,用于同时操作数据库表中数据 create user tom identified by 'tom'; 然后同时再用该用户启动M ...

  4. 用Taro写一个微信小程序(一)——开始一个项目

    一.Taro简介 1.名字由来 Taro['tɑ:roʊ],泰罗·奥特曼,宇宙警备队总教官,实力最强的奥特曼. 2.taro是什么 Taro 是一个开放式跨端跨框架解决方案,支持使用 React/Vu ...

  5. 痛!痛!痛!我们的好兄弟Git,一路走好!

    文章是正经文章,标题不要在意,哈哈 Git作为现在主流的版本控制工具,但是如何在软件开发过程中进行合理的分支管理是一个见仁见智的问题. 接下来我会对比下现有的几种比较普遍的分支管理方式和之前在阿里时候 ...

  6. Java变量详解(变量定于及语法创建)

    变量的使用定义 变量用于操作系统中,实体之间的传递,把变量看作一个在内存空间中声明的存储位置,在调用变量的时候,系统会自动的调用内存中的存储位置. 在Java中,变量又称为字段,故字段在Java中又有 ...

  7. Java基础(面试复习整理)

    基础知识和语法 Java语言初识 计算机语言发展 机器语言.汇编.C.C++.Java Java的诞生与发展 1995 JavaSE JavaME Android JavaEE 2006(大数据) H ...

  8. Webuploader 简单图片上传 支持多图上传

    简介: 通过webuploader 实现简单的图片上传功能,支持多张图上传 官方文档传送门:http://fex.baidu.com/webuploader/getting-started.html# ...

  9. 【swagger】 swagger-ui的升级版swagger-bootstrap-ui

    swagger-bootstrap-ui是基于swagger-ui做了一些优化拓展: swagger-ui的界面: swagger-bootstrap-ui界面: 相比于原生的swagger-ui , ...

  10. Windows系统之间文件互传

    1)利用Windows自带的文件共享服务 本次试验以Win7为服务器端,win10为客户端 1.确保Win7服务端开启对应的服务及开放相应的端口号 进入命令行界面,输入netstat -an,查看44 ...