1.Sed是操作、过滤和转换文本内容的强大工具,常用功能有增删改查、过滤、取行.

options(常用参数):

-n:使用安静(silent)模式,在一般 sed 的用法中,所有来自 STDIN 的数据都会被输出到终端上.
但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行才会被列出来.
-e:直接在命令列模式上进行 sed 的动作编辑;
-r:sed 的动作支持的是延伸型正规表示法的语法.(默认是基础正规表示法语法)
-i:直接修改读取的文件内容,而不是输出到终端.

function(功能):

a:新增,a的后面可以接字串,这些字串会append到目标行的下一行;
d:删除,因为是删除,所以 d 后面不接任何东西;
i:插入,i的后面可以接字串,这些字串会在insert到目标行的上一行;
p:列印,即:将某个选择的数据打印.通常p会与-n搭配使用;
s:取代,可以直接进行取代,一般搭配正则使用.

2.a 追加文本到指定行后;i 插入文本到指定行前

cat person.txt
101,oldboy,CEO
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO # 单行插入
sed '2a 106,dandan,CSO' person.txt
sed '2i 106,dandan,CSO' person.txt
# 多行插入
sed '2a 106,dandan,CSO\n107,bingbing,CCO' person.txt
sed -ir '13i Port 52113\nPermitRootLogin no\nPermitEmptyPasswords no' /root/hehe.sshd

3.d 删除指定的行

sed '2d' person.txt    # 对第n行操作
sed '2,5d' person.txt # 对n到m行操作,包括第n,m行
sed '3,$d' person.txt # 对n到最后一行($代表最后一行)操作,包括第n行
sed '/zhangyao/d' person.txt # 对匹配zhangyao的行操作
sed '/oldboy/,/Alex/d' person.txt # 对匹配oldboy的行到匹配Alex的行操作
# 对匹配oldboy的行到第10行操作,如果前10行没有匹配到oldboy,则显示10行以后的匹配oldboy的行,如果有的话.
sed '/oldboy/,10d' person.txt
# 打印文件内容但不包含oldboy,其实就是删除包含"oldboy"的行
sed '/oldboy/d' person.txt

4.p 输出指定内容,默认会输出两次匹配的结果,因此使用n取消默认输出

sed '2p' person.txt       # 会取出所有内容
sed -n '2,3p' person.txt # 会取出想要的内容
sed -n '1~2p' person.txt # 取出奇数行
sed -n '2~2p' person.txt # 取出偶数行
sed -n 'p' person.txt # 取出所有行
# 按字符串查询
sed -n '/CTO/p' person.txt
sed -n '/CTO/,/CFO/p' person.txt
# 混合查询
sed -n '/CTO/,/CFO/p' person.txt
# 前两行没有匹配到feixue,就向后匹配,如果匹配到feixue就打印此行
sed -n '/feixue/,2p' person.txt

5.分组替换--sed的后向引用

sed -n 's#()()#\1\2#gp' file
# 前两个##之间对匹配到的内容进行处理,可以分组,也可以不分,取决于想做什么操作
cat a.txt
I am oldboy linux teacher sed -n 's#^.*m ##gp' a.txt
oldboy linux teacher
sed -nr 's#^.*m (.*) l.*$#\1#gp' a.txt
oldboy # sed调换元素位置
# /etc/passwd文件第一行是:root:x:0:0:root:/root:/bin/bash
sed -nr '1s#(^.*):x.*$#\1#gp' /etc/passwd # 取出root
sed -nr '1s#(^.*):.*$#\1#gp' /etc/passwd # 取出root:x:0:0:root:/root
# 是因为贪婪模式(能多取就多取) # 将第一行内容分成三组:
sed -nr '1s#(^.*)(:x.*:)(/.*$)#\2#gp' /etc/passwd
输出第二部分是:x:0:0:root:/root:,它为什么不输出:x:0:0:root:,
把/root:/bin/bash给第三部分呢?还是因为贪婪模式. [:alnum:]--匹配任意一个字母或数字字符 # 示例:[[:alnum:]]+
[:alpha:]--匹配任意一个字母字符 # 示例:[[:alpha:]]{4}
# 想把第一行的第一个元素和最后一个元素对调,就得把这一行内容分成三组:
sed -nr '1s#([[:alnum:]]+)(:.*:)(/.*$)#\1#gp' /etc/passwd
sed -nr '1s#([[:alpha:]]+)(:.*:)(/.*$)#\1#gp' /etc/passwd
sed -nr '1s#([[:alpha:]]{4})(:.*:)(/.*$)#\1#gp' /etc/passwd
# 匹配非冒号的字符,至少一个
sed -nr '1s#([^:]+)(:.*:)(/.*$)#\1\3#gp' /etc/passwd

6.特殊符号及命令

a.{}相当于乘法分配律
sed -n '2,4p;=' person.txt # 打印2-4行,并显示所有行的行号
sed -n '2,4{p;=}' person.txt # 打印2-4行,只显示2-4行的行号 b.打印不可见字符(如制表符、换行符等)之l
sed -n 'l' person.txt c.转换之y
tr 'abc' 'ABC' person.txt # 这两种方式都是一一对应转换的
sed 'y#abc#ABC#' person.txt d.退出之q(查看几行内容,然后退出,只能指定单个数字,不能指定范围)
sed '3q' person.txt e.读入之r(在指定行之后添加内容,默认是每一行都添加)
sed 'r a.txt' person.txt
sed '1r a.txt' person.txt
# 合并两个文件内容
sed '$r a.txt' person.txt

7.模式空间(保持空间先不深究)

# n:清空当前模式空间,然后读入下一行;
sed -n 'n;p' person.txt
102,zhangyao,CTO
104,yy,CFO
跟打印偶数行有点类似,但原理不同,读入第一行,遇到n,然后被清空;读入第二行,遇到p,然后打印. # N:不清空当前模式空间,然后读入下一行;
cat test.txt
first line
second line
third line sed "=" test.txt | sed 'N;s#\n# #'
1 first line
2 second line
3 third line
# 经过第一步处理,此时的模式空间为:
1$
first line$
2$
second line$
3$
third line$
第一行遇到N,换行符被转换为空格,读入下一行,但不做处理.

以后处理文件内容,想把奇数行和偶数行关联起来,可以用模式空间来做.

8.模拟其他命令

cat person.txt
sed -n 'p' person.txt
sed ' ' person.txt grep "zhang" person.txt
sed -n '/zhang/p' person.txt
grep -v "zhang" person.txt
sed -n '/zhang/ !p' person.txt # 打印前两行的四种方法
head -2 person.txt
sed -n '1,2p' person.txt
sed '3,$d' person.txt
sed '2q' person.txt wc -l person.txt
sed -n '$=' person.txt

老男孩教育三剑客之sed行天下:https://blog.oldboyedu.com/commands-sed/

sed理论讲解、实战的更多相关文章

  1. SSIS从理论到实战,再到应用(4)----流程控制之For循环

    原文:SSIS从理论到实战,再到应用(4)----流程控制之For循环 上期回顾: SSIS从理论到实战,再到应用(3)----SSIS包的变量,约束,常用容器 在SSIS体系中,控制流可能经常会遇到 ...

  2. Docker最全教程——从理论到实战(八)

    在本系列教程中,笔者希望将必要的知识点围绕理论.流程(工作流程).方法.实践来进行讲解,而不是单纯的为讲解知识点而进行讲解.也就是说,笔者希望能够让大家将理论.知识.思想和指导应用到工作的实际场景和实 ...

  3. Docker最全教程——从理论到实战(七)

    在本系列教程中,笔者希望将必要的知识点围绕理论.流程(工作流程).方法.实践来进行讲解,而不是单纯的为讲解知识点而进行讲解.也就是说,笔者希望能够让大家将理论.知识.思想和指导应用到工作的实际场景和实 ...

  4. Docker最全教程——从理论到实战(六)

    托管到腾讯云容器服务 托管到腾讯云容器服务,我们的公众号“magiccodes”已经发布了相关的录屏教程,大家可以结合本篇教程一起查阅.   自建还是托管? 在开始之前,我们先来讨论一个问题——是自建 ...

  5. Docker最全教程——从理论到实战(五)

    往期内容链接 Docker最全教程——从理论到实战(一) Docker最全教程——从理论到实战(二) Docker最全教程——从理论到实战(三) Docker最全教程——从理论到实战(四) 本篇教程持 ...

  6. SSIS从理论到实战,再到应用

    原文:SSIS从理论到实战,再到应用 一,是什么(What?) 1.SSIS是Microsoft SQL Server Integration Services的简称,是生成高性能数据集成解决方案(包 ...

  7. SSIS从理论到实战,再到应用(6)----SSIS的自带日志功能

    原文:SSIS从理论到实战,再到应用(6)----SSIS的自带日志功能 上期回顾: SSIS从理论到实战,再到应用(5)----流程控制之Foreach循环 博主最近新负责了一个ssis大项目的架构 ...

  8. SSIS从理论到实战,再到应用(7)----常用的数据类型转换操作

    原文:SSIS从理论到实战,再到应用(7)----常用的数据类型转换操作 上期回顾: SSIS从理论到实战,再到应用(6)----SSIS的自带日志功能 在抽取各种应用的数据时候,经常会遇到数据需要转 ...

  9. SSIS从理论到实战,再到应用(5)----流程控制之Foreach循环

    原文:SSIS从理论到实战,再到应用(5)----流程控制之Foreach循环 上期回顾: SSIS从理论到实战,再到应用(4)----流程控制之For循环 上一期讲了For循环,Foreach循环相 ...

随机推荐

  1. centos7 安装显卡驱动方法

    方法一: 首先需要添加一个第三方的源ELRepo.这个源支持RED HAT系的Linux系统,主要是提供一些硬件的驱动程序.这个源的主页如下: http://elrepo.org/tiki/tiki- ...

  2. servlet 作用

    什么是Servlet Servlet是一个Java编写的程序,此程序是基于Http协议的,在服务器端运行的(如tomcat),是按照Servlet规范编写的一个Java类. 在BS架构中,早期的Web ...

  3. php 审批流程管理

    1.流程管理的用法是什么样的? 2.怎么发起想要的流程? 3.审批的人要是怎么审批通过? 4.流程审核是不是要挨个走过? 一.要有数据库的内容的 肯定会有表的,首先就是用户表了,然后就是流程表,用户编 ...

  4. Winform 连接Oracle10g时出错的解决方法

    环境:Win7(64位). VS2012 update3.Oracle10 (本机已安装ODTwithODAC1120320_32bit) 最近在开发一程序时莫名其妙报一个错误(未能加载文件或程序集“ ...

  5. 设计模式(二 & 三)工厂模式:2-工厂方法模式

    模拟场景: 沿用 设计模式(二)工厂模式:1-简单工厂模式 中关于运算器 Operation 的例子. 思想: 针对在 Easy Factory 中提出的,破坏“开-闭原则”的问题,Factory M ...

  6. 刷题总结——game(hdu4616)

    题目: Nowadays, there are more and more challenge game on TV such as 'Girls, Rush Ahead'. Now, you par ...

  7. 【库存】NOI笔试习题集

    https://wenku.baidu.com/view/2dc9d10854270722192e453610661ed9ad5155ba.html

  8. jenkins+maven+testng参数化执行测试用例

    碰到一个场景是,在做自动化中,一个系统往往需要兼容很多浏览器,如何在一个工程中,通过参数化去启动不同的浏览器,而无需改动配置文件呢? 我解决的思路是: 1.通过jenkins的参数传递给maven 2 ...

  9. 2017-2018-2 20179204《网络攻防实践》linux基础

    我在实验楼中学习了Linux基础入门课程,这里做一个学习小结. 第一节 linux系统简介 本节主要介绍了linux是什么.发展历史.重要人物.linux与window的区别以及如何学习linux. ...

  10. bzoj 2797 [Poi2012]Squarks 枚举一个,推出所有

    题目大意 设有n个互不相同的正整数{X1,X2,...Xn},任取两个Xi,Xj(i≠j),能算出Xi+Xj. 现在所有取法共n*(n-1)/2个和,要你求出X1,X2,...Xn. 输出所有满足条件 ...