sed是流编辑器,可以对文本进行逐行判断并编辑的一种非常强大的文本处理工具

工作原理:

1.读取一行到模式空间(pattern space)

2.从指定的操作指令集中取出第一个指令,判断是否匹配所要的模式

3.不匹配就忽略后续的编辑指令,直接回到第2步读取下一条指令,以此类推,直到所有指令执行完毕

4.输出缓存在模式空间的内容,有-n选项则抑制这项输出,回到第一步继续读取下一行的内容,重复上述操作

5.直到所有行都处理完毕,结束

注:所有的处理都是对模式空间里的内容进行处理

使用格式:sed [option]... {Script} [FILE]...(其中Script包括地址跟编辑命令)

常用选项:

-n  抑制模式空间的行输出

-e  多项编辑命令一次性执行

-r  支持扩展的正则表达式

-f  file 将操作命令集写在文件中,使用-f调用该文件

-i  直接修改源文件

-i.bak 直接修改源文件的同时生成备份文件

地址:

  空地址:对全文进行处理

  单地址

    n 行号,对第n行进行处理

    /pattern/ 被正则表达式匹配到的行

  地址对:

    n,m  第n行到第m行

    n,+m   从第n行到向下m行

    n,/pattern/  从第n行到正则表达式匹配到的行

    /pattern1/,/pattern2/  从pattern1匹配到的行到pattern2匹配到的行

    $  最后一行

  步进地址表示法:

    n~m 从第n行开始,每隔m行处理一行,例,处理所有奇数行:1~2;所有偶数行:2~2

编辑命令:

模式空间命令:

  d:delete,删除模式空间的内容

  p:print,将模式空间里的内容打印至屏幕

  =:输出行号

  n:next,读取下一行

  l:list,输出行控制符,类似$,\t等

  [line-address]c\string:change,改变指定行的内容为string,只支持单行处理

  [line-address]a\STRING:append,在指定行下一行追加内容,只支持单行处理

  [line-address]i\STRING:insert,在指定行上一行追加内容,只支持单行处理

  s/RegExp/REPLACE/g:search,搜索与替换,"/"可以换成其他符号:#@%…支持多行处理

  在s///中使用分组及后向引用   eg: sed -r 's/i love (\S+) and (\S+)/\1 love \2/' /tmp/test

  y/abc/xyz/:转换字符,a转成x,b转成y,c转成y,逐一对应转换   

  [line-address]r file:read,将文件 file 的内容读取到指定行中

  w file:write,保存内容至文件 file 中

  [line-address]q : quit,读取到匹配行之后退出

  N:将下一行读至模式空间,用\n连接上一行,若其后再无操作,则等价于跳过下一行

  P:输出上一行的内容

  D:删除上一行的内容

保持空间命令:

  H/h:hold,将模式空间内容复制(h),通过\n追加(H)到保持空间

  G/g: get,将保持空间内容复制(g),通过\n追加(G)到模式空间

  x:exchange,将保持空间内容和模式空间内容交换

例子:

1.使用n或p打印奇数行或偶数行(列出4种方法)

1 sed -n 'p;n' test.txt #奇数行
2 sed -n 'n;p' test.txt #偶数行
3 sed -n '1~2p' test.txt #奇数行
4 sed -n '2~2p' test.txt #偶数行

2.对于包含test到west之间的行,每行加上字符串'aaa bbb'

  sed '/test/,/west/s/$/aaa bbb/' file 

3. 查找包含line1的行到包含line2的行之间的所有aa bbb替换成AA BBB

  sed '/line1/,/line2/s/aa bbb/AA BBB/' test.sh 

4.显示第一次匹配到的3到最后一行输出

  sed -n '/3/,$p' test.sh 

5.逆序显示文本内容

1 sed '1!G;h;$!d' test
2 sed -n  '1!G;h;$p' test

6.删除原有的所有空白行,而后为所有的非空白行后添加一个空白行

  sed '/^$/d;G' /etc/passwd 

7.将'yes'替换成'no',并且只在行中未出现字串'hello'的情况下替换

  sed '/hello/ !s/yes/no/g' file 

8.将每行的字符逆序显示

 sed '/\n/!G;s/\(.\)\(.*\n\)/&\2\1/;//D;s/.//' file 

这题较难,给一个流程:

PATT:abc$
HOLD:$
COMM:/\n/ !G
PATT:abc\n$
HOLD:$
COMM:s/\(.\)\(.*\n\)/&\2\1/
PATT:abc\nbc\na$
HOLD:$
COMM:// D
PATT:bc\na$
HOLD:$
COMM:/\n/ !G
PATT:bc\na$
HOLD:$
COMM:s/\(.\)\(.*\n\)/&\2\1/
PATT:bc\nc\nba$
HOLD:$
COMM:// D
PATT:c\nba$
HOLD:$
COMM:/\n/ !G
PATT:c\nba$
HOLD:$
COMM:s/\(.\)\(.*\n\)/&\2\1/
PATT:c\n\ncba$
HOLD:$
COMM:// D
PATT:\ncba$
HOLD:$
COMM:/\n/ !G
PATT:\ncba$
HOLD:$
COMM:s/\(.\)\(.*\n\)/&\2\1/
PATT:\ncba$
HOLD:$
COMM:// D
PATT:\ncba$
HOLD:$
COMM:s/.//
PATT:cba$
HOLD:$
cba

9.将数字'1234567'显示为1,234,567

 echo "1234567" | sed ':a;s/\B[0-9]\{3\}\>/,&/;ta' 

转载于:https://www.cnblogs.com/fllf/p/10023301.html

文本处理三剑客之sed命令详解相关推荐

  1. Linux|文本处理三剑客之sed命令详解

    文章目录 sed命令 sed命令处理文本的过程: sed的常用选项: sed的常用编辑命令: sed的p命令示例: 引用shell变量:双引号 .花括号括变量名 &的用法 标签的用法(分组思想 ...

  2. Shell三剑客之sed命令详解

    目录 一.sed命令的常见用法 选项 操作 二.用法示例 2.1.输出符合条件的文本(p表示正常输出) 2.2.sed结合正则表达式输出指定行 2.3.删除符合条件的文本 2.4.插入符合条件的行 三 ...

  3. 1.10-linux三剑客之sed命令详解及用法

    内容: 1.sed命令介绍 2.语法格式,常用功能 查询  增加  替换 批量修改文件名 第1章 sed是什么 字符流编辑器 Stream Editor 第2章 sed功能与版本 处理出文本文件,日志 ...

  4. linux 之sed命令详解

    sed命令详解 sed是什么 sed是linux文本处理三剑客之一,全称 StreamEDitor,非常著名的行编辑器,功能十分强大. sed的工作过程 sed处理文本时每次从文件复制出来一行,放在工 ...

  5. linux三剑客之awk命令详解

    linux三剑客之awk命令详解 awk 是一个处理文本的编程语言工具,能用简短的程序处理标准输入或文件.数据排序.计算以及生成报表等等.awk工具主要用于格式化输出,可以用类似于处理表格的方式处理文 ...

  6. linux sed p变量,Linux sed 命令详解系列教程之各种问题解决

    本文目录: 1 sed中使用变量和变量替换的问题 2 反向引用失效问题 3 "-i"选项的文件保存问题 4 贪婪匹配问题 5 sed命令"a"和"N& ...

  7. cut\grep\awk\sed命令详解

    cut\grep\awk\sed命令详解 1.cut命令详解及实例 (1)作用:提取文件中指定的列 语法格式:cut  选项  文件名   (2)选项作用:      -d 分隔符     按照指定的 ...

  8. ubuntu下sed命令详解 - Dicky - 开源中国社区

    ubuntu下sed命令详解 - Dicky - 开源中国社区 ubuntu下sed命令详解 - Dicky - 开源中国社区 ubuntu下sed命令详解     7人收藏此文章, 我要收藏 发表于 ...

  9. linux sed.写文件,Linux文件处理sed命令-linux sed命令详解-linux sed写入文件-嗨客网

    Linux文件处理sed命令详解教程 Linux sed命令使用 Linux sed 命令处理时,把当前处理的行存储在临时缓冲区中,称为 "模式空间"( oattern space ...

最新文章

  1. 使用jquery的load方法设计动态加载,并解决被加载页面JavaScript失效问题
  2. kalman 滤波 演示与opencv代码
  3. git 文件全部标红_git冲突解决,代码冲突、合并冲突。【IDEA版本】
  4. 《OpenGL ES应用开发实践指南:Android卷》—— 2.2 不要从头开始
  5. makefile文件简要介绍
  6. Navicat日期时间格式
  7. JavaScript——易班优课YOOC课群在线测试自动答题解决方案(二十)整理维护
  8. C51语言支持哪些数据类型,C51编译器支持的数据类型(1)
  9. java xml 反射_Java 读取XML文件以及Java 的反射机制实现
  10. 微信小程序教程02:App(Object)和Page(Object) 构造器介绍
  11. 三大运营商5G基站大单纷纷落地:华为、中兴、爱立信、大唐移动收获大
  12. JS----window对象详解
  13. 【论文分享】ACL 2020 信息抽取任务中的新动向
  14. 基于C++的校园一卡通管理系统
  15. usb声卡驱动_哑巴电脑拯救者——它可能是你见过使用最简单的外接声卡!
  16. 我的gitbub的学习目录
  17. 【苹果鼠标滑轮失灵】解决办法
  18. 利用FlashPaper在web页面中显示PDF文件(兼容各浏览器)
  19. 统一网关Gateway、路由断言工厂、路由过滤器及跨域问题处理
  20. Vue笔记随笔---kalrry

热门文章

  1. python入门之数据类型及常用操作
  2. 【通俗易懂】现场总线与工业以太网
  3. 自己写的一个简单的android记事本app
  4. 题目 1214: 恺撒密码
  5. 金蝶专业版怎么反过账当月_金蝶kis专业版的反过账是怎么操作的?
  6. linux nbu客户端配置,NBU服务器连不上客户端的相关推荐_ChinaUnix论坛
  7. 【深度】剖析微金云宝适合新手的几点优势
  8. 计算机毕业设计 SSM旅游推荐系统 智慧旅游管理系统 旅游景区管理系统Java
  9. 【组合问题】-组合的输出
  10. dojo入门介绍(一)