一,sed是什么?

sed是Strem Editor(流编辑器)缩写,是操作、过滤和转换文本内容的强大工具。对文件内容逐行(行编辑器,一行读取一次,对行编辑)进行处理调用操作并显示到STDOUT,常用功能有增删改查,过滤,取行。

二,sed的工作流程

(1)sed默认不编辑原文件,而是逐行操作处理,把当前处理的行存储在临时缓存空间,称为“模式空间”(pattern space)。

(2)接着在pattern space内进行模式匹配,即和指定条件做匹配

不满足模式:输出到标准输出STDOUT;

满足模式:进行指定的模式操作,再输出到STDOUT;

(3)第二个特殊的缓存空间——“保持空间”:hold space,临时保存操作在另一处缓存空间;

(4)当执行pattern space和 hold space里相关选项的时候来回进行之间的数据流编辑操作;

(5)最后根据操作执行hold space空间操作,选择性显示到STDOUT;  

三,sed的语法格式

sed [OPTION]...  'script'  [input-file] ...

注意:1.sed和后面的选项之间至少有一个空格

2.script:指的是AddressCommands(地址定界编辑命令),AddressCommands中间无空格,直接连接为一个选项操作

3.input-file(输入文件)是可选项,sed还能够从标准输入如管道获取输入。

四,sed的常用选项和地址定界

(1)OPTION常用选项:

-n:不输出模式空间中的内容至屏幕;
-e script, --expression=script:多点编辑;
-f  /PATH/TO/SED_SCRIPT_FILE:每行一个编辑命令;
-r, --regexp-extended:支持使用扩展正则表达式;
-i[SUFFIX], --in-place[=SUFFIX]:直接编辑原文件 ;(编辑操作的结果直接保存在原文件中)

(2)地址定界:

①空地址:什么都不写时,表示对全文进行处理;
   ②单地址:
       #:指定行;
       /pattern/:被此模式所匹配到的每一行;注意:【/ /】是固定模式符号,不能省略

③地址范围:(#表示任意数字)
       #,#:从某行到某行,第二个#大于第一个#

#,+#:从某行开始到加多少行(3,+8 :第3行向下开始一共8行,包含第三行)
       #,/pattern1/:(从指定的行开始到第一次被模式所匹配的行结束的所有行)
       /pattern1/,/pattern2/:从第一次匹配到的模式1到第二次匹配到的模式2
       $:最后一行;
   ④步进:~,#~#   从第几行

1~2:所有奇数行。    从第一行开始,每次加两行读取

2~2:所有偶数行。    从第二行开始,每次加两行读取

五,sed编辑命令

  (1)常用编辑命令:

d:删除;

~]# sed '1d' FILE                 #删除第一行
~]# sed  '2,$d' FILE              #删除第二行到最后一行

  p:列印;显示模式空间中的内容,但默认会输出2次匹配的结果,因此使用-n取消默认输出;

~]# sed -n '1p' FILE             #显示第一行
~]# sed -n '2,$p' FILE              #显示第二行到最后一行

a \text:新增;在行后面追加文本“text”,支持使用\n实现多行追加;

~]# sed   '/^test/a\this is' FILE        #将 this is 追加到以test开头的行后面
~]# sed   '2a\this is\nis this' FILE     #将 this is 和 is this 多行追加第二行后面

  i  \text:插入;在行前面插入文本“text”,支持使用\n实现多行插入;

~]# sed -i '5i\this is' FILE        #在文件第5行之前插入this is
~]# sed -i '5i\this is\nis this' FILE  #将 this is 和 is this 多行插入第5行之前

c \text:按行替换;把匹配到的行替换为此处指定的文本“text”;

~]# sed  '2c\this is' FILE            #将文件第二行替换为this is

w /PATH/TO/SOMEFILE:保存模式空间匹配到的行至指定的文件中;

~]# sed -n '/test/w file' example     #在example中所有包含test的行都被写入file里

r  /PATH/FROM/SOMEFILE:读取指定文件的内容至当前文件被模式匹配到的行后面;文件合并;

~]# sed   '2r  file'   filename   #将file的内容读进来显示在filename文件第二行后面

  =:为模式匹配到的行打印行号;

~]# sed   '/this is/='   FILE       #显示 this is 的行号

  !:条件取反;

   地址定界!编辑命令;

~]# sed '1!d' FILE         #除了第一行全部删除

  s///:查找替换,其分隔符可自行指定,常用的有s@@@, s###等;

~]# sed 's/book/books/' FILE        #把每一行中第一处 book 替换成 books

   替换标记:

     g:全局替换;

~]# sed 's/book/books/g' FILE        #把每一行中的所有 book 替换成 books
~]# sed 's/book/books/3g' FILE       #从每一行的第三处开始替换

     w /PATH/TO/SOMEFILE:将替换成功的结果保存至指定文件中;
     p:显示替换成功的行;

~]# sed 's/book/books/3gp' FILE       #显示替换成功的行

  练习:

  1.删除text9文件中所有以空白字符开头的行的行首的所有空白字符;

~]# sed 's@^[[:space:]]\+@@' text9


  2.删除text9文件中所有以#开头的行的行首的#号及#后面的所有空白字符;

~]# sed  's@^#[[:space:]]*@@' text9


  3.输出一个绝对路径给sed命令,取出其目录,其行为类似于dirname;

~]# echo "/var/log/messages/" | sed 's@[^/]\+/\?$@@'
~]# echo "/var/log/messages" | sed -r 's@[^/]+/?$@@'

(2)高级编辑命令:

h:把模式空间中的内容覆盖至保持空间中;
   H:把模式空间中的内容追加至保持空间中;
   g:把保持空间中的内容覆盖至模式空间中;
   G:把保持空间中的内容追加至模式空间中;

P:打印多行匹配空间的第一行。

x:把模式空间中的内容与保持空间中的内容互换;
   n:覆盖读取匹配到的行的下一行至模式空间中;
   N:追加读取匹配到的行的下一行至模式空间中;
   d:删除模式空间中的行;
   D:删除多行模式空间中的所有行;

  实例:

sed  -n  'n;p'  FILE:显示偶数行;
   sed  '1!G;h;$!d'  FILE:逆序显示文件的内容;
   sed  ’$!d'  FILE:取出最后一行;
   sed  '$!N;$!D' FILE:取出文件后两行;
   sed '/^$/d;G' FILE:删除原有的所有空白行,而后为所有的非空白行后添加一个空白行;
   sed  'n;d'  FILE:显示奇数行;
   sed 'G' FILE:在原有的每行后方添加一个空白行


六,实战案例

1.变量替换

2.分组替换\( \)和\1的用法:

\( \)的功能可以记住正则表达式的一部分,其中,\1为第一个记住的模式即第一个小括号中的匹配内容,\2第二记住的模式,即第二个小括号中的匹配内容,sed最多可以记住9个。

  

①^.*am–>这句的意思是以任意字符开头到am为止,匹配文件中的I am字符串;
   ②\([a-z].*\)–>这句的外壳就是括号\(\),[a-z].*合起来就是匹配任意多个字符,因为ood字符串是我们需要的,因此用括号括起来匹配,后面通过\1来取good字符串;
   ③ b.*$–>表示以空格b起始,任意字符结尾,实际就是匹配good字符串后,紧接着的字符串 boy.;
   ④sed默认识别基本正则表达式,sed加上-r选项则可以使用扩展正则表达式。

3.特殊符号 & 代表被替换的内容

   将text9前三行中 b 改成 --b--

~]# sed '1,3s#b#--&--#g' text9

  

4.打印奇偶行

打印奇数行:

~]# sed -n '1~2p' text9
~]# sed -n 'p;n' text9

打印偶数行:

~]# sed -n 'n;p' text9
~]# sed -n '2~2p' text9

5.获取本机IP地址

~]# ifconfig | sed -n '2p' | sed 's/^.*inet//g' | sed 's/netmask.*$//g'

   6.将text9中偶数行末尾替换成 --w ;

sed '2~2s#$#--w#' text9
sed 'n;s#$#--w#' text9
sed '1~2!s#$#--w#' text9

转载于:https://blog.51cto.com/wqiang/1753180

Linux文本三剑客之sed仗剑走天涯相关推荐

  1. Geek爱旅行 - 仗剑走天涯

    记得刚毕业的时候,也就是2004年,那时的我还在郑州,一个月三千,过了试用期转正又涨了两千,特别开心.虽然路不好走,每天要处理的问题都是自己不会的,但是慢慢习惯了这种生活带来的压力,由于小地方的坑比较 ...

  2. nutch学习、、孤剑之家 宝剑锋从磨砺出,梅花香自苦寒来。我欲仗剑走天涯。 博客园 首页 新随笔 联系 订阅订阅 管理 随笔 - 771 文章 - 8 评论 - 13

    孤剑之家 宝剑锋从磨砺出,梅花香自苦寒来.我欲仗剑Nutch 2.2+MySQL+Solr4.2实现网站内容的抓取和索引 原文地址: http://blog.sina.com.cn/s/blog_3c ...

  3. Linux文本三剑客之sed

    sed命令详解 一.简介 二.工作原理 三.用法 1.地址定界 2.编辑命令 四.实例及详解 一.简介 sed是一种新型的,非交互式的流式(从上往下读取一行处理一行)的编辑器 可以执行vi和ex相同的 ...

  4. 三年已投 1000 亿打造的达摩院,何以仗剑走天涯?

    [CSDN 编者按]带着"必须要比阿里巴巴活的时间长"的愿景,达摩院进入"三岁而立"之年.据报道,阿里巴巴旗下研究机构达摩院首次公布了三年来的成绩单,成绩十分亮 ...

  5. 三年投 1000 亿,达摩院何以仗剑走天涯?

    作者 | Carol 责编 | 张   文 头图 | 下载于视觉中国 出品 | CSDN(ID:CSDNnews) [CSDN 编者按]带着"必须要比阿里巴巴活的时间长"的愿景,达 ...

  6. 2020-04-13起码仗剑走天涯

    讲个小故事,自有一腔热血少年气,一心想去看看世界的繁华,出门的时候,剑还未配妥,骑着马就走上了江湖,可是你在路上遇到一个人,她在后面抱着你,她说要许你终生,发现,剑是破剑,马是跛马,天涯呢?远在天边, ...

  7. 曾梦想仗剑走天涯,看世界的繁华

    "如果过去的就让他过去了,未来的只会更糟糕"'.本文就是基于这样一个想法而写的.用来审视过去的10年. 高中过后,就没怎么写过文章.大学时期多是写写作业和实验报告,但那些东西只是为 ...

  8. Solomon Hykes离开Docker公司,自此仗剑走天涯

    Solomon Hykes的成功之路一直崎岖而坎坷.他的Docker创立旅程,始于10年前在巴黎建立的dotCloud,并以今天提出的辞职请求作结.期间,Hykes领导dotCloud由一家PaaS公 ...

  9. OSChina 周一乱弹 —— 曾梦想仗剑走天涯,后来bug多没去

    2019独角兽企业重金招聘Python工程师标准>>> Osc乱弹歌单(2019)请戳(这里) [今日歌曲] @宇辰OSC :分享Rag'N'Bone Man的单曲<Skin& ...

最新文章

  1. [Medical Image Processing] 1. Introduction
  2. Windows下Core Audio APIs的使用简介
  3. 网页按钮跳转位置_阻止safari从网页跳转至app
  4. HTTP 错误 404.3 - Not Found 由于扩展配置问题而无法提供您请求的页面
  5. 不要打2岁内和6岁后的孩子 父母必看
  6. php mysql数据库同步_实现MySQL数据库同步实例演示_MySQL
  7. 前端常用60余种工具方法(下)
  8. hibernate笔记--使用注解(annotation)方式配置单(双)向多对一的映射关系
  9. 如何在Android中使用Intent拨打电话?
  10. linux xp双系统引导修复工具,XP和ubuntu双系统下如何修复XP引导菜单
  11. iOS导入自定义字体
  12. Idea导入jar包的两种方法
  13. 产品流程图的制作方法详解
  14. retrofit应用详解与源码解析--源码解析
  15. java Outlook的日程_使用Outlook进行日程安排的方法
  16. springboot DataSource
  17. 一年级上册知识点——语文(人教版)
  18. 破解携程中文验证码爬取机票价格数据
  19. 基于Dense-U-net的3D粒子场全息重建
  20. 《Python股票量化交易从入门到实践》随书赠送“回测框架”的使用帮助

热门文章

  1. CallContext和多线程
  2. 关于ASP.NET控件DropDownList控件的问题
  3. 云计算技术都要学什么?教你分清公有云、私有云和混合云
  4. Winrar目录穿越漏洞复现
  5. Python3判断自身脚本是不是在运行
  6. 吴恩达 NIPS 2016:利用深度学习开发人工智能应用的基本要点(含唯一的中文版PPT)...
  7. 3TB-GPT-MBR
  8. 精益 React 学习指南 (Lean React)- 3.4 掌控 redux 异步
  9. C#编写Windows服务程序图文教程
  10. Linux sed命令使用