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. Distributed | ZooKeeper

    ZooKeeper与之前看的论文不太一样,它主要是描述了一个分布式协调服务,提供了wait-free的api,可以让用户自己设计要求更高的原语.通过Zab协议保证sever之间的一致性,同时让读请求在 ...

  2. Day1---Java 基本数据类型 - 四类八种 --九五小庞

    一.Java四大数据类型分类 1.整型 byte .short .int .long 2.浮点型 float . double 3.字符型 char 4.布尔型 boolean 二.八种基本数据类型 ...

  3. 带你全面认识CMMI V2.0(五)——改进

    改进(Improving)涉及开发.管理和改进过程及其相关资产,其主要重点是提高组织绩效.保持习惯和持久性可确保过程在整个组织中是持久.习惯性地执行和维持,并有助于有效地实现业务绩效目标.治理(GOV ...

  4. inline&register

    inline关键字: 内联只是一个请求,不代表编译器会响应:同时某些编译器会将一些函数优化成为内联函数. C++在类内定义的函数默认是内联函数,具体是否真变成内联函数还需看编译器本身. registe ...

  5. (十八)VMware Harbor 镜像同步

    为什么需要镜像同步 由于对镜像的访问是一个核心的容器概念,在实际使用过程中,一个镜像库可能是不够用的,下例情况下,我们可能会需要部署多个镜像仓库: 国外的公有镜像下载过慢,需要一个中转仓库进行加速 容 ...

  6. 网络编程Netty入门:ByteBuf分析

    目录 Netty中的ByteBuf优势 NIO使用的ByteBuffer有哪些缺点 ByteBuf的优势和做了哪些增强 ByteBuf操作示例 ByteBuf操作 简单的Demo示例 堆内和堆外内存 ...

  7. 做个开源博客学习Vite2 + Vue3 (一)搭建项目

    前言 不会 webpack,遇到报错就一头雾水,完全不知道怎么办,而且体积还大速度还慢. 所以尤雨溪做了 vite 后就很向往,只是知道自己水平有限还是等大佬先趟趟坑,等差不多了在跳. 现在vite2 ...

  8. 多图详解 TCP 连接管理,太全了!!!

    TCP 是一种面向连接的单播协议,在 TCP 中,并不存在多播.广播的这种行为,因为 TCP 报文段中能明确发送方和接受方的 IP 地址. 在发送数据前,相互通信的双方(即发送方和接受方)需要建立一条 ...

  9. Day12_60_多线程的创建和启动(一)

    多线程的创建和启动 * 在java语言中实现多线程的第一种方式, 继承 java.lang.Thread; 之后重写run()方法. * 使用多线程之后,主线程和其他线程是不在同一个栈中的,一个线程对 ...

  10. 简单好用微服务套件Anno&Viper DashBoard全新版来啦

    1.Anno简介?         Anno是一个微服务框架引擎.入门简单.安全.稳定.高可用.全平台可监控.依赖第三方框架少.底层通讯RPC(Remote Procedure Call)采用稳定可靠 ...