sed 增删改查详解以及 sed -i原理

我为什么要详细记录sed命令:

sed 擅长取行。工作中三剑客使用频率最高,本篇文章将对sed命令常用的 增,删,改,查

进行详细讲解,以备以后工作中遗忘了查询,sed命令是作为运维人员来说,必须必掌握的技能

如果三剑客你不会,那么你不用做运维了。

sed简介:

是一种流编辑器,它是文本处理中非常中的工具,能够完美的配合正则表达式使用,功能不同凡响。处理

时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓

冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。

文件内容并没有 改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件

的反复操作;编写转换程序等。

添加测试文本:

cat >sed.log<<"EOF"


101,$oldboy,CEO

102,$zhangyao,CTO

103,$Alex,COO

104,$yy,CFO

105,$feixue,CIO

>>"EOF"

sed的语法格式:

sed [选项] [指令] [输入文件]

sed命令的执行流程:

sed命令是把文件一行行的读到内存中当成一行处理, 它也被称为流编辑器,跟车间中的流水线一样,一行一行的逐个处理。获取到需要的内容后显示到屏幕上。

sed原理:

sed 读取一行内容后,sed判断是否满足条件

sed版本查看:

 sed -v

sed基础参数:


-n 取消默认输出

-r 支持正则表达式

-p 打印

-e 多项编辑

-i.bak  修改后备份 

s 搜索一次

sg 搜索全局

# # #  : s#替换前#替换后#g

/ / / : 与###一样

sed功能详解:

sed增加:

-i : 在 XX行的下一行增加内容

-a: 在XX行的上一行增加内容

sed  i参数 :演示
增:
案例1:sed单行增加
[[email protected] ~]# sed ‘2i nihaoya‘ sed.log

101,$oldboy,CEO

nihaoya

102,$zhangyao,CTO

103,$Alex,COO

104,$yy,CFO

105,$feixue,CIO

案例2:sed行前多行增加
[[email protected] ~]# sed ‘2i nihaoya\nwohenhao‘ sed.log

101,$oldboy,CEO

nihaoya

wohenhao

102,$zhangyao,CTO

103,$Alex,COO

104,$yy,CFO

105,$feixue,CIO

-a:演示

【增】案例1:sed行后单行增加
[[email protected] ~]# sed ‘2a nihaoya‘ sed.log

101,$oldboy,CEO

102,$zhangyao,CTO

nihaoya

103,$Alex,COO

104,$yy,CFO

105,$feixue,CIO 

【增】案例2:sed行后多行增加

[[email protected] ~]# sed ‘2a nihaoya\nwohenhao‘ sed.log

101,$oldboy,CEO

102,$zhangyao,CTO

nihaoya

wohenhao

103,$Alex,COO

104,$yy,CFO

105,$feixue,CIO

【增】案例3:sed 不同行多项增加 sed -e
[[email protected] ~]# sed -e ‘2i 123‘ -e ‘5i 456‘ sed.log

101,$oldboy,CEO

123

102,$zhangyao,CTO

103,$Alex,COO

104,$yy,CFO

456

105,$feixue,CIO

sed删除 (d)

【删】sed删除案例1: 删除指定行

[[email protected] ~]# sed ‘4d‘ sed.log

101,$oldboy,CEO

102,$zhangyao,CTO

103,$Alex,COO

105,$feixue,CIO

【删】sed删除案例2:删除连续的行

[[email protected] ~]# sed ‘2,4d‘ sed.log

101,$oldboy,CEO

105,$feixue,CIO

【删】sed删除案例3:删除不连续的行

seq 10 |sed -e{2,4,8}d    ##注意这里不能添加引号或者双引号,否则报错

【删】sed 删除案例4: 删除 n和n 匹配的行


[[email protected] ~]# sed -nr ‘/103|105/!p‘ sed.log 
101,$oldboy,CEO
102,$zhangyao,CTO
104,$yy,CFO                ### !除了103.105开头的行 都删除 然后打印
【改.替换】sed修改案例1:

修改:

案例1:修改单个字符

[[email protected] ~]# sed ‘s#102#1031#g‘ sed.log

101,$oldboy,CEO

1031,$zhangyao,CTO

103,$Alex,COO

104,$yy,CFO

105,$feixue,CIO

案例2: 修改101为109

[[email protected] ~]# sed -r ‘1s#[0-9]+#109#‘ sed.log

109,$oldboy,CEO

102,$zhangyao,CTO

103,$Alex,COO

104,$yy,CFO

105,$feixue,CIO

案例3: 把101改为oldboy  ----报错原因:sed -r 一个一个读取,读取到有数字就改为

oldboy,这里有3个数字,所以出现了3个oldboy

[[email protected] ~]# sed ‘1s#[0-9]#oldboy#g‘ sed.log

oldboyoldboyoldboy,$oldboy,CEO

102,$zhangyao,CTO

103,$Alex,COO

104,$yy,CFO

105,$feixue,CIO

解决办法(-r):
[[email protected] ~]# sed -r ‘1s#[0-9]+#oldboy#g‘ sed.log

oldboy,$oldboy,CEO

102,$zhangyao,CTO

103,$Alex,COO

104,$yy,CFO

105,$feixue,CIO

如果配错了那么3个oldboy 如何改回101呢?
[[email protected] ~]# sed -r ‘1s#(oldboy)+#101#‘ sed.log

101,$oldboy,CEO

102,$zhangyao,CTO

103,$Alex,COO

104,$yy,CFO

105,$feixue,CIO

如果你写成了
sed -r ‘1s#(oldboy)+#101#g‘ sed.log  
也会不成功,那是因为 他有g选项,会全部替换,也就是3个oldboy。解决办法
把 oldboy 使用括号括起来,然后使用 s 尾部的g不要使用,g就是变成3个oldboy的源泉

sed -ri 修改后备份,但是,i 必须要放在最后,否则无法备份

例子: sed -ri ‘/^123/d‘ 1.txt

sed -i 的工作原理:

sed -i.bak修改文件的时候,他会把源文件移动,然后创建新的文件,写入这个命令的结果。

可以通过修改文件后使用 ls -il  x x.bak   来查看 x文件 和他的备份文件 x.bak 。你会发现他们的inode就不一样了。这就是sed -i.bak 的原理

小问题:

echo用来给文件追加多行内容的时候,需要使用 echo -e

【查询】  |  是正则符号需要加r

[显示] 1到4行


[[email protected] ~]# sed -n ‘1,4p‘ sed.log

101,$oldboy,CEO

102,$zhangyao,CTO

103,$Alex,COO

104,$yy,CFO

【查询】  |  是正则符号需要加r

排除1-4行

[[email protected] ~]# sed -n ‘1,4!p‘ sed.log

105,$feixue,CIO

[查询]显示2 4 两行

[[email protected] ~]# sed -nr ‘/2|4/p‘ sed.log

102,$zhangyao,CTO

104,$yy,CFO


[查询] 查询103开头的行

[[email protected] ~]# sed -n ‘/^103/p‘ sed.log

103,$Alex,COO

[查询] 查询103结尾的行

[[email protected] ~]# sed -n ‘/$103/p‘ sed.log 
103,$Alex,COO,103

[查询] 查询103开头105开头的行(正则)

[[email protected] ~]# sed -n ‘/^103/,/^105/p‘ sed.log

103,$Alex,COO

104,$yy,CFO

105,$feixue,CIO

[查询] 查询 105以及 和 103 开头的行(正则 需要加 r)

[[email protected] ~]# sed -nr ‘/^103|^105/p‘ sed.log

103,$Alex,COO

105,$feixue,CIO

[排除] 排除一行

[[email protected] ~]# sed -n ‘1!p‘ sed.log

102,$zhangyao,CTO

103,$Alex,COO

104,$yy,CFO

105,$feixue,CIO

[排除] 排除多行

[[email protected] ~]# sed -n ‘1,2!p‘ sed.log

103,$Alex,COO

104,$yy,CFO

105,$feixue,CIO

[排除不连续的行]

[[email protected] ~]# sed -nr ‘/102|104/!p‘ sed.log

101,$oldboy,CEO

103,$Alex,COO

105,$feixue,CIO

原文地址:https://www.cnblogs.com/superlinux/p/0d8983d3cbf309a1ef7fb14ebbee9ec8.html

时间: 2024-10-12 22:39:56

sed 增删改查详解以及 sed -i原理的相关文章

sed增删改查详解以及sed -i原理

我为什么要详细记录sed命令: sed擅长取行.工作中三剑客使用频率最高,本篇文章将对sed命令常用的增,删,改,查进行详细讲解,以备以后工作中遗忘了查询,sed命令是作为运维人员来说,必须必掌握的技能.如果三剑客你不会,那么你不用做运维了. sed简介: 是一种流编辑器,它是文本处理中非常中的工具,能够完美的配合正则表达式使用,功能不同凡响.处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送

iOS CoreData 增删改查详解

最近在学习CoreData, 因为项目开发中需要,特意学习和整理了一下,整理出来方便以后使用和同行借鉴.目前开发使用的Swift语言开发的项目.所以整理出来的是Swift版本,OC我就放弃了. 虽然Swift3 已经有了,目前整理的这个版本是Swift2 的.Swift 3 的话有些新特性. 需要另外调整,后续有时间再整理. 继承CoreData有两种方式: 创建项目时集成 这种方式是自动继承在AppDelegate里面,调用的使用需要通过UIApplication的方式来获取AppDelega

Yii2.0数据库操作增删改查详解

1.简单查询: one(): 根据查询结果返回查询的第一条记录. all(): 根据查询结果返回所有记录. count(): 返回记录的数量. sum(): 返回指定列的总数. average(): 返回指定列的平均值. min(): 返回指定列的最小值. max(): 返回指定列的最大值. scalar(): 返回查询结果的第一行中的第一列的值. column(): 返回查询结果中的第一列的值. exists(): 返回一个值,该值指示查询结果是否有数据. where(): 添加查询条件 wi

OAF_OAF EO系列增删改 - Delete详解和实现(案例)

2014-06-14 BaoXinjian 一.摘要 在OAF中,似乎不是根据你光标所在的行来删除对应的记录,而是根据记录指针来删除,而这个指针又与你的光标位置无关需要用代码来精确的定位.因此我们在删除记录时,需要编写一定的代码来实现. User’s Guide中提供了一种标准的删除方法,通过在在当前记录集中用指针进行循环来定位需要删除的记录(例子提供的是只删一条). 不管如何删除,总的实现思路如下: Step1. 首先给需要删除的记录做标记:  要么打勾选上,要么在行上放个图标按钮来点火,总之

SSH登录与增删改查demo详解+源代码

点击下载,测试绝对可用SSH整合框架登录加增删改查demo 下载地址:http://download.csdn.net/detail/qq_33599520/9784679   一.框架概述 spring+Struts2+hibernate(SSH)整合框架是一种非常典型与实用的Web项目MVC架构,其中: Spring主要通过控制反转(IOC)与依赖注入(DI)控制对象的创建与维护,与实现面向切片编程(AOP),核心配置文件为:applicationContext.xml. Struts2是M

sed的增删改查、sed常见问题

作者:Georgekai 归档:学习笔记 2018/1/10 本章正题:sed的使用.sed常见问题 1.1 SED 1.1.1 sed是什么 :全称字符流编辑器Stream Edite 1.1.2 sed功能与版本: 1. 处理纯文本文件.日志.配置文件 2. 增删改查 3. 查看sed版本:sed --version 1.1.3 语法格式 1. sed  [选项]  [sed指令]  [输入文件] 2. sed -i.bak 's#oldboy#oldbgirl#g' oldboy.txt

Java+MyEclipse+Tomcat (六)详解Servlet和DAO数据库增删改查操作

此篇文章主要讲述DAO.Java Bean和Servlet实现操作数据库,把链接数据库.数据库操作.前端界面显示分模块化实现.其中包括数据的CRUD增删改查操作,并通过一个常用的JSP网站前端模板界面进行描述.参考前文: Java+MyEclipse+Tomcat (一)配置过程及jsp网站开发入门 Java+MyEclipse+Tomcat (二)配置Servlet及简单实现表单提交 Java+MyEclipse+Tomcat (三)配置MySQL及查询数据显示在JSP网页中 Java+MyE

使用DOM进行xml文档的crud(增删改查)操作&amp;lt;操作详解&amp;gt;

很多朋友对DOM有感冒,这里我花了一些时间写了一个小小的教程,这个能看懂,会操作了,我相信基于DOM的其它API(如JDOM,DOM4J等)一般不会有什么问题. 后附java代码,也可以下载(可点击这里入下载)导入到Eclipse或MyEclipse. Node和Element的关系 Element是Node的子接口,所以Element的方法要比Node方法要多,这样的话使用起来比较方便,一般情况我们都把节点转换成元素(或者叫标签,即Element); Element是Node的子类型: 比如我

使用DOM进行xml文档的crud(增删改查)操作&lt;操作详解&gt;

很多朋友对DOM有感冒,这里我花了一些时间写了一个小小的教程,这个能看懂,会操作了,我相信基于DOM的其它API(如JDOM,DOM4J等)一般不会有什么问题. 后附java代码,也可以下载(可点击这里入下载)导入到Eclipse或MyEclipse. Node和Element的关系 Element是Node的子接口,所以Element的方法要比Node方法要多,这样的话使用起来比较方便,一般情况我们都把节点转换成元素(或者叫标签,即Element); Element是Node的子类型: 比如我