Sed命令的基本使用

sed介绍

粘贴一段wiki的介绍:

sed (stream editor) is a Unix utility that parses and transforms text, using a simple, compact programming language. sed was developed from 1973 to 1974 by Lee E. McMahon of Bell Labs, and is available today for most operating systems.

总的来说就是sed是unix类os下的文本操作工具,负责解析和转换文本

Linux常用的文本工具

文本处理的三驾马车

  • grep
  • sed
  • awk

sed: stream Editor

Features

  1. 行编辑器,逐行进行
  2. 分为模式空间和保留空间
  3. 逐行处理,支持模式匹配(regex)
  4. 默认不处理源文件,仅对模式空间中的进行处理
  5. 处理结束后将模式空间中的结果输出到屏幕

Usage

sed [option] 'AddressCommond' file

Address(需要处理的行)

  • StartLine,endLine

比如1,100,表示1-100行 特别注意的是,可以使用$:最后一行

  • /RegExp/(正则表达式)

比如: /^root/,表示以root开始的行

  • /pattern1/,/pattern2/

第一次被pattern1匹配到的行开始到被pattern2匹配到的行结束

  • LineNumber

指定某行

  • startLine, +N

从startLine开始向后的N行,总共是N+1行

Commonds

sed的命令很多,这里我只列出常用的commonds

  • d:删除符合条件的行
  • p:显示符合条件的行
  • a \string:在匹配的行后追加新行,内容是string
  • i \string:在匹配的行前追加新行,内容是string
  • r FILE:将指定的文件的内容添加到匹配的行之后
  • w FILE:将指定范围内的内容另存到指定的文件中
  • s /pattern/ReplaceString/修饰符:将符合模式的字符串替换为ReplaceString(默认只替换每行中第一次被模式匹配到的串)

可以使用三个相同的字符来代替’/’,上面的字符串替换等价于s #pattern#ReplaceString#修饰符 特别的可以使用&:表示整个模式匹配到的字符串

修饰符:

  1. g:全局替换
  2. i:匹配时忽略大小写

Options

  • -n:静默模式,不显示模式空间中的内容
  • -r:使用扩展的正则表达式
  • -i:直接修改源文件(危险慎重使用)
  • -e 处理 -e 处理:连续进行sed的处理
  • -f:指定处理脚本

另外可以使用类似sed -f SCRIPTFILE file (将SCRIPTFILE中的每个命令作用在file上)

Examples

  1. sed ‘1,2d’ /etc/fstab (删除/etc/fstab的第一和第二行)
  2. sed -n ‘/^\//p’ /etc/fstab (显示/etc/fstab中以/开头的行)
  3. sed ‘/^\//a #hello world\n#hello,linux’ /etc/fstab (在/etc/fstab中以/开头的行后一行追加”#hello world\n#hello,linux”) (其中\n会换行)
  4. sed ‘2r /etc/issue’ /etc/fstab (在/etc/fstab中的第二行之后追加/etc/issue文件中的内容)
  5. sed ‘/oot/w /tmp/oot.txt’ /etc/fstab (将/etc/fstab文件中的包含oot的行的内容另存到/tmp/oot.txt)
  6. sed ‘s#1..e#&r#g’ sed.txt (将sed.txt中的符合l..e模式的字符串全部在后面加上”r”)
  7. sed ‘s#(1..e)#\1r#g’ sed.txt (将sed.txt中的符合l..e模式的字符串全部在后面加上”r”)
  8. sed ‘s#l(..e)#L\1#g’ sed.txt (将sed.txt中的符合l..e模式的字符串的小写的”l”换成大写的”L”)

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏葡萄城控件技术团队

Spread for Windows Forms高级主题(2)---理解单元格类型

理解单元格类型基本信息 Spread支持几十种单元格类型,如复选框单元格、日期时间单元格、或者一个简单的文本单元格。单元格类型可以对单独的单元格、列、行、一个单...

1808
来自专栏james大数据架构

Android 命名规范 (提高代码可以读性)

android文件众多,根据名称来辨别用途很重要,因此命名要规范 这篇文章可参考:Android 命名规范 (提高代码可以读性) 刚接触android的时候,命...

1917
来自专栏上善若水

S008SELinux的约束操作

约束(constraints),是SELinux很有用的特新,它的使用十分普遍。很多时候,用户觉得约束是一种添加到黑名单上,并使其受限的方法。当然前提是默认允许...

1042
来自专栏大史住在大前端

webpack4.0各个击破(5)—— Module篇

使用webpack对脚本进行合并是非常方便的,因为webpack实现了对各种不同模块规范的兼容处理,对前端开发者来说,理解这种实现方式比学习如何配置webpac...

952
来自专栏python成长之路

Pygame常用方法

2855
来自专栏知无涯

JS一些表单验证常用的正则表达式收集

2488
来自专栏老九学堂

十七个C语言新手编程时常犯的错误及解决方式

编译程序把a和A认为是两个不同的变量名,而显示出错信息。C认为大写字母和小写字母是两个不同的字符。习惯上,符号常量名用大写,变量名用小写表示,以增加可读性。

1284
来自专栏九彩拼盘的叨叨叨

百度使用Cheatsheet

914
来自专栏顶级程序员

说出来你们可能不信,但是数组名确实不是指针常量

这篇是一篇C语言劝退流教学文,看不懂的同学应该是劝退教学流的目标对象 (写完了才想起来注一下,本文提到的“数组”和“数组名”字样,指的是数组左值表达式(arr...

3466
来自专栏菩提树下的杨过

vs.net的调试小技巧之#define debug(适合新手)

大多数情况下,vs.net中我们可以用断点来解决调试问题,但有些时候也可能手动需要输出一些信息做为调试的参考,你是否有过调试完成以后,忘记删除某条输出语句的经历...

1819

扫码关注云+社区