专栏首页技术沉淀命令行工具:sed流式编辑

命令行工具:sed流式编辑

sed

简介

sed表示stream editor,流式编辑,把文件按行读进来,做处理。做替换处理text replacement ,或者删除操作的时候特别有用。

基本的命令模式sed [options] commands [file-to-edit]

其中commands是传给sed的命令,也是最核心的;

commands的模式为[addr]X[options],其中addr指定是对哪些行做操作,比如第1行,或者3-100行,也可以通过正则表达式确定;其中X是一个字符的sed命令,常见的有p打印,d删除,s替换等;[options]表示不同命令所需要的参数,比如替换操作时g表示全局替换;

[file-to-edit]是需要处理的文件,当然sed也可以接受stdin作为输入。

Cookbook

sed涉及的参数太多了,直接用一个个case比较好解释。

打印行的操作:

sed默认会对匹配到的行做echo操作,所以默认是有print操作的,可以用参数-n抑制默认的打印操作,一般-np放在一起使用。

  • sed '' filename:和cat一个效果;
  • sed -n '1p' filename:打印第一行;
  • sed -n '10,20p' filename:打印10-20行;
  • sed -n '10,+10p' filename:打印从第10行开始的10行,注意有的版本的sed不支持;

删除行的操作:

  • sed '1d' filename:删除第一行,当我们不需要CSV的header时候很实用;
  • sed -i '1d' filename:删除文件第一行,in-place模式,也就是直接修改文件,比较危险;
  • sed -i.bak '1d' filename:删除文件第一行,in-place模式,但会先创建一个filename.bak文件;
  • sed '2,10d' filename:删除第2-10行,2,10指定一个区间range;
  • sed /^$/d filename:删除空行,这里是用正则表达式锁定操作的区间的,也就是匹配到空行才执行操作;
  • sed /^foo/d filename:删除以foo开头的行;
  • sed /ERROR/!d filename:删除包含ERROR的行,其中!作用是negate the range,对不包含在指定range里的行操作;

替换行的操作:

s表示substitute,也是sed最强大的命令。基本模式就是sed 's/regex/replacement/' filename,其中s表示替换,注意/需要三个,一个都不能少哦,也可以用其他字符统一替换,比如:sed 's:regex:replacement:' filename同样有效;s前面也可以指定range,限定要替换的范围,不指定的话对所有行操作。

  • sed 's/this/This/' filename:把this替换为This,只替换第一个匹配的this;
  • sed 's/this/This/g' filename:global模式,把所有的this替换为This;
  • sed 's/this/This/2 filename:替换第二个this为This;注意这里指的是当前行匹配到的第二个this;

echo "thisthisthis" | sed 's/this/This/2'会输出thisThisthis

  • sed -n 's/this/This/2p' filename:会打印发生替换的行;
  • sed 's/this/This/i filename':查找的时候忽略大小写;
  • sed -e 's/this/This/' -e 's/that/That/' filename:整合多条sed命令;

Reference

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Spark读取结构化数据

    Spark可以从本地CSV,HDFS以及Hive读取结构化数据,直接解析为DataFrame,进行后续分析。

    用户2183996
  • Hinge Loss

    用户2183996
  • Ruby练习二input: ['cars', 'for', 'potatoes', 'racs', 'four','scar', 'creams', 'scream']=> output: [["c

    用户2183996
  • shell脚本监控磁盘使用率

    简单的一个监控磁盘分区使用率的脚本,欢迎批评指正. #!/bin/sh # df -h:查看硬盘信息 # sed '1d':删除第一行 # awk '{prin...

    行 者
  • Sublime Text 使用技巧1

    Sublime Text 是一款功能很强大的编辑器,用起来很爽,界面也很华丽。但我看了一系列的学习视频时候,才发现为我对Sublime Text 2的许多功能还...

    王云峰
  • 在线办公市场竞争加剧,百度如流锚定“知识管理”,生态联动大有可为

    日前,百度宣布旗下的在线办公品牌“百度Hi”进行全面升级,正式更名为“如流”,期望进一步打造成为具备知识管理能力的新一代人工智能办公平台。

    曾响铃
  • vue 随记(5):性能的飞跃

    尤雨溪的B站直播介绍到更新相比于vue2有1.3~2倍的性能优势。那么vue3比vue2块在哪里?

    一粒小麦
  • 《Linux命令行与shell脚本编程大全》第二十一章 sed进阶

    本章介绍一些sed编辑器提供的高级特性。 21.1 多行命令 按照之前的知识,所有的sed编辑器命令都是针对单行数据执行操作的。 在sed编辑器读取数据流时,它...

    xcywt
  • 前台分页,以及类别选择

    效果: ? 前台分页 区别于后台分页的将第几页和共多少条传到后台,再从后台从数据库查询出当前页应该显示的数据返回 前台分页是将所有的数据都查出存到前台,在经过用...

    二十三年蝉
  • 第32天:微博发布动态

    半指温柔乐

扫码关注云+社区

领取腾讯云代金券