浅谈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

3. -i ---sed命令的参数

4. s --sed指令

5. g ---就是个修饰

1.1.4 sed命令的实行过程  

1. 把内容读取到内存中(模式空间)

2. 判断是否是满足我要的条件(默认都会显示到屏幕)

3. 3. sed有个默认输出所以不加-n,都会显示到屏幕

4. 继续读取直到最后一行

1.1.5 sed常用功能

实验环境:

[[email protected] ~]# vim person.txt

101,oldboy,CEO

102,zhangyao,CTO

103,Alex,COO

104,yy,CFO

105,feixue,CIO

实例1-1 查询p(print)

1. 单行 - 行号

[[email protected] ~]# sed -n ‘3p‘ person.txt

2. 找出包含oldboy的行

[[email protected] ~]# sed -n ‘/oldboy/p‘ person.txt

注://中间可以写需要找的内容

3. 多行连续显示(知道行号)

[[email protected] ~]# sed -n ‘1,3p‘ person.txt

4. 多行连续显示,显示包含oldboy的行到包含yy的行(不知道行号,模糊查找)

[[email protected] ~]# cat person.txt|sed -n ‘/oldboy/,/yy/p‘

5. 显示不连续的行

[[email protected] ~]# nl person.txt |sed -n ‘1p;3p;4p‘

注:sed或awk中,加多个命令,用分号分割(;)

实例1-2 增加

1. 在文件最后一行增加俩行

方法一:[[email protected] ~]# echo -e "106,wuxingge,UFO\n107,lee,XO" >>person.txt

方法二:[[email protected] ~]# nl person.txt |sed -n ‘$a 106,wixingge,UFO\n107,lee,XO.p‘

注:1. 这里的$表示最后一行,a前面可加行号

2. a === append追加,当前行的下一行追加

3. i === insert插入,当前行的上一行插入

4. 中间的\n ,表示回车键

方法三:[[email protected] ~]# cat >> person.txt <<EOF

EOF

实例1-3 删除

1. 单行删除

[[email protected] ~]# nl person.txt |sed ‘1d‘ -i

2. 多行删除

[[email protected] ~]# cat person.txt |sed ‘/old/,/yy/d‘

[email protected] ~]# cat person.txt|sed ‘1d;3d;4d;5d‘

2.不显示文件的空行

方法一:[[email protected] ~]# cat person.txt |grep -v ‘^$‘

方法二:[[email protected] ~]# cat person.txt |sed -n ‘/^$/!p‘

注:!在sed中也是取反的意思

方法三:[[email protected] ~]# cat person.txt |sed ‘/^$/d‘

方法四:[[email protected] ~]# cat person.txt |awk ‘!/^$/‘

 

实例1-4 替换s

注:在“s###g”中遇到以#开头的条件,3个#可以用3个@代替

1. 不加小g,默认只替换每一行的第一个找到的条件

[[email protected] ~]# sed ‘s#[1-9]#AAAA#‘ person.txt

注:后面加g,会替换每一行满足条件的所有

2. 备份

[[email protected] ~]# sed -i.bak.$(date +%F) ‘sg#old#boy#‘ person.txt

注:先备份源文件,在修改源文件的内容

3. sed中变量的使用

[[email protected] ~]# x=oldboy

[[email protected] ~]# y=oldgirl

[[email protected] ~]# sed "s#$x#$y#g" person.txt

注:sed的使用变量需要用双引号

 4. 单引号与双引号区别

  [[email protected] oldboy]# echo ‘I‘am lee‘

  > ^C

  [[email protected] oldboy]# echo "I‘am lee"

  I‘am lee

  [[email protected] oldboy]# echo ‘I"am" lee‘

  I"am" lee

 

实例1-5 反向引用(先保护,在使用)

 1. &符号的作用

  [[email protected] ~]# echo ‘123456‘ |sed -r ‘s#.#<&>#g‘

  <1><2><3><4><5><6>

  注:& 表示前俩个#号中间正则匹配到的所有内容

 2. 命令拼接,批量修改文件名称

创建环境:

  [[email protected] ~]# touch oldboy{01..10}.jpg

如何修改:

  方法一:[[email protected] ~]# ls oldboy*.avi|sed -r ‘s#(.*).avi#mv & \1.jpg#g‘|bash

    注:1.bash的作用,执行前面管道后输出的内容

 2.& 表示前俩个#号中间正则匹配到的所有内容

 3.\1 表示前面()中的内容

方法二:把以txt结尾的文件,中的txt替换成jpg

  [[email protected] ~]# rename txt jpg old*.txt

  [[email protected] ~]# ls

  oldboy01.jpg  oldboy04.jpg  oldboy07.jpg  oldboy10.jpg

  oldboy02.jpg  oldboy05.jpg  oldboy08.jpg  person.txt

  oldboy03.jpg  oldboy06.jpg  oldboy09.jpg

格式

  rename     form          to             file

  要替换的源内容是什么 替换成什么内容 替换哪些文件

jpg                      avi                       *.jpg

1.1.6 使用sed命令的常见问题

 1. -r与-i同时使用

  -ri (正常):先使用扩展正则,在修改文件内容

  -ir :先备份文件名为“什么什么r”的备份文件,然后在替换源文件中的内容

 2. -i禁止与-n一起使用

  如:sed -ni ‘1p‘ person.txt  会把源文件内容清空,只留下第一行

原文地址:https://www.cnblogs.com/bryant-dai/p/8407382.html

时间: 2024-10-08 08:48:19

浅谈sed的相关文章

浅谈 sed

sed 是linux命令中用于行数据处理的工具,能处理来自管道或者文件的输入. 语法: sed [选项] '[过滤字符][{]处理命令[}]',其中 []包围的表示不是强制必写. "过滤字符"的格式是/字符串/,'/'不能省略 "处理命令"如果是多个的话用分号";"隔开,用'{}'包围,如果有多个处理命令,相当于一个命令集. 1. sed能对行进行处理 选项有如下几种常用的: -n: 安静模式,只输出做过处理的行,否则会重复输出处理的行.安静模式

浅谈sed用法

原理 一行文本被读到模式空间以后,首先会判断模式空间的行是否能被你定义的模式所匹配到,如果能匹配到就对它做一次输出操作,而后做编辑操作,如果不期望直接输出模式空间的内容到屏幕可以加-n选项 文本处理三剑客: grep, egrep, fgrep:文本过滤器 sed:Stream EDitor,流编辑器,行 awk:文本格式化工具,报告生成器 sed [OPTION]...  'script'  file1 ... script: 地址定界编辑命令 常用选项: -n:不输出模式空间中的内容至屏幕:

Linux的文本处理工具浅谈-awk sed grep

Linux的文本处理工具浅谈 awk   老大 [功能说明] 用于文本处理的语言(取行,过滤),支持正则 NR代表行数,$n取某一列,$NF最后一列 NR==20,NR==30 从20行到30行 FS竖着切,列的分隔符 RS横着切,行的分隔符 [语法格式] awk [–F] [“[分隔符]”] [’{print$1,$NF}’] [目标文件] awk 'BEGIN{FS="[列分隔符]+";RS="[行分隔符]+";print "-GEGIN-"

浅谈ELK日志分析平台

作者:珂珂链接:https://zhuanlan.zhihu.com/p/22104361来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 小编的话 "技术干货"系列文章意在分享技术牛人的知识干货,每期主题都不一样哟!期待各位读者在文后发表留言,来一场技术上的交流和思想上的碰撞! 2016年7月20日,本期品高云公开课由叶春草带来"可视化案发现场--浅谈ELK日志分析平台"的分享. 分享嘉宾 叶春草现就职于品高云软件技术支持工程师.就职

【架构】浅谈web网站架构演变过程

浅谈web网站架构演变过程 前言 我们以javaweb为例,来搭建一个简单的电商系统,看看这个系统可以如何一步步演变. 该系统具备的功能: 用户模块:用户注册和管理 商品模块:商品展示和管理 交易模块:创建交易和管理 阶段一.单机构建网站 网站的初期,我们经常会在单机上跑我们所有的程序和软件.此时我们使用一个容器,如tomcat.jetty.jboos,然后直接使用JSP/servlet技术,或者使用一些开源的框架如maven+spring+struct+hibernate.maven+spri

Linux特殊符号浅谈

Linux特殊字符浅谈 我们经常跟键盘上面那些特殊符号比如(?.!.~...)打交道,其实在Linux有其独特的含义,大致可以分为三类:Linux特殊符号.通配符.正则表达式. Linux特殊符号又可以分以下几类 1.管道符号 字符 名称 功能描述 | 管道 传递的普通的字符串,来自于前一个命令 |xargs 管道流转换 与xargs 传递的是把字符串变成了文件名 2.目录结构 字符 名称 功能描述 . 当前目录 .. 当前目录上一级目录 3.重定向符号 字符 名称 功能描述 > 输出重定向 会

.net中对象序列化技术浅谈

.net中对象序列化技术浅谈 2009-03-11 阅读2756评论2 序列化是将对象状态转换为可保持或传输的格式的过程.与序列化相对的是反序列化,它将流转换为对象.这两个过程结合起来,可以轻松地存储和传输数 据.例如,可以序列化一个对象,然后使用 HTTP 通过 Internet 在客户端和服务器之间传输该对象.反之,反序列化根据流重新构造对象.此外还可以将对象序列化后保存到本地,再次运行的时候可以从本地文件 中“恢复”对象到序列化之前的状态.在.net中有提供了几种序列化的方式:二进制序列化

浅谈——页面静态化

现在互联网发展越来越迅速,对网站的性能要求越来越高,也就是如何应对高并发量.像12306需要应付上亿人同时来抢票,淘宝双十一--所以,如何提高网站的性能,是做网站都需要考虑的. 首先网站性能优化的方面有很多:1,使用缓存,最传统的一级二级缓存:2,将服务和数据库分开,使用不同的服务器,分工更加明确,效率更加高:3,分布式,提供多台服务器,利用反向代理服务器nginx进行反向代理,将请求分散开来:4,数据库的读写分离,不同的数据库,将读操作和写操作分开,并实时同步即可:5,分布式缓存,使用memc

单页应用SEO浅谈

单页应用SEO浅谈 前言 单页应用(Single Page Application)越来越受web开发者欢迎,单页应用的体验可以模拟原生应用,一次开发,多端兼容.单页应用并不是一个全新发明的技术,而是随着互联网的发展,满足用户体验的一种综合技术. SEO 一直以来,搜索引擎优化(SEO)是开发者容易忽略的部分.SEO是针对搜索(Google.百度.雅虎搜索等)在技术细节上的优化,例如语义.搜索关键词与内容相关性.收录量.搜索排名等.SEO也是同行.市场竞争常用的的营销手段.Google.百度的搜