Linux三剑客-SED
1、Sed是什么
Sed:字符流编辑器,Stream Editor
2、Sed功能与版本
处理日志文件,日志,配置文件等
增加、删除、修改、查询
sed --version 可以通过man sed 来检验系统中有没有安装sed
[root@luffy-001 ~]# sed --version
GNU sed version 4.2.1
Copyright (C) 2009 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE,
to the extent permitted by law. GNU sed home page: <http://www.gnu.org/software/sed/>.
General help using GNU software: <http://www.gnu.org/gethelp/>.
E-mail bug reports to: <bug-gnu-utils@gnu.org>.
Be sure to include the word ``sed'' somewhere in the ``Subject:'' field.
3、语法格式
sed [选项] [sed指令] [输入文件]
sed -i.bak ‘s#oldboy#oldgirl#g’ oldboy.txt
-i --sed命令的参数
s --sed命令/指令
g ------小尾巴/修饰
4、命令执行流程
模式空间:sed从文件读取一行文本后存入缓存区(这个缓存区在内存中)
5、常用功能
查询
创建测试文件
cat>person.txt<<EOF
101,oldboy,CEO
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
EOF
按行查询
-n 取消默认输出
# #1、显示某一行,单行
[root@luffy-001 oldboy]# sed -n '1p' person.txt
101,oldboy,CEO
# #如果没有‘1p’,默认会显示所有内容
# #2、显示连续多行
[root@luffy-001 oldboy]# sed -n '2,4p' person.txt
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
# #3、显示包含oldboy的行到包含104的行
# #先看包含oldboy的行,记住要使用斜线//包起来
[root@luffy-001 oldboy]# sed -n '/oldboy/p' person.txt
101,oldboy,CEO
# #显示包含oldboy的行到以104开头的行(只用了特殊符号)
[root@luffy-001 oldboy]# sed -n '/oldboy/,/^104/p' person.txt
101,oldboy,CEO
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
[root@luffy-001 oldboy]#
# #4、 查询制定更多行,通过分号隔开
[root@luffy-001 oldboy]# sed -n '2p;4p' person.txt
102,zhangyao,CTO
104,yy,CFO
过滤多个字符
-r sed选项,支持扩展正则表达式(|、()),默认情况,sed只支持基本正则表达式
sed里面的正则字符左右必须要用“/”。
sed命令通过正则表达式进行过滤========相当于egrep
[root@luffy-001 oldboy]# egrep 'oldboy|yy' person.txt
101,oldboy,CEO
104,yy,CFO [root@luffy-001 oldboy]# sed -rn '/oldboy|yy/p' person.txt
101,oldboy,CEO
104,yy,CFO
增加
单行增加
a 追加append,在指定行后面添加一行或者多行文本
i 插入insert,在指定行前面添加一行或者多行文本
# 在第三行后面增加
[root@luffy-001 oldboy]# sed '3a 103.5,Lee,UFO' person.txt
101,oldboy,CEO
102,zhangyao,CTO
103,Alex,COO
103.5,Lee,UFO
104,yy,CFO
105,feixue,CIO
# 在第三行前面增加
[root@luffy-001 oldboy]# sed '3i 103.5,Lee,UFO' person.txt
101,oldboy,CEO
102,zhangyao,CTO
103.5,Lee,UFO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
# 查看文件并没有被修改
[root@luffy-001 oldboy]# cat person.txt
101,oldboy,CEO
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
# $表示最后一行
[root@luffy-001 oldboy]# sed -n '$p' person.txt
105,feixue,CIO
# 在最后一行加入一行内容new、new、new
[root@luffy-001 oldboy]# sed '$a new,new,new' person.txt
101,oldboy,CEO
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
new,new,new
# echo >> 也可以在文件最后追加单行
多行增加
# 在最后加上多行(不常用,有其他方法)
[root@luffy-001 oldboy]# sed '$a new,new,new\nold,old,old,old\nwww' person.txt
101,oldboy,CEO
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
new,new,new
old,old,old,old
www
# 使用cat命令向文件追加多行
cat >>person.txt<<EOF
new,new,new
old,old,old,old
www
EOF
删除
单行删除
[root@luffy-001 oldboy]# sed '$d' person.txt
101,oldboy,CEO
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
多行删除
[root@luffy-001 oldboy]# sed '2,3d' person.txt
101,oldboy,CEO
104,yy,CFO
105,feixue,CIO
[root@luffy-001 oldboy]# sed '1,4d' person.txt
105,feixue,CIO
不显示文件中的空行
[root@luffy-001 oldboy]# cat -n person.txt
1 101,oldboy,CEO
2
3 102,zhangyao,CTO
4 103,Alex,COO
5
6 104,yy,CFO
7
8 105,feixue,CIO
[root@luffy-001 oldboy]# cat -nA person.txt
1 101,oldboy,CEO$
2 $
3 102,zhangyao,CTO$
4 103,Alex,COO$
5 $
6 104,yy,CFO$
7 $
8 105,feixue,CIO$
[root@luffy-001 oldboy]# grep -v '^$' person.txt 使用grep,去反
101,oldboy,CEO
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
[root@luffy-001 oldboy]# sed '/^$/d' person.txt 使用sed(正则)删除空行
101,oldboy,CEO
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
[root@luffy-001 oldboy]# sed -n '/^$/!p' person.txt ! 表示去反
101,oldboy,CEO
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
[root@luffy-001 oldboy]# sed '$d' person.txt 删除最后一行
101,oldboy,CEO 102,zhangyao,CTO
103,Alex,COO 104,yy,CFO [root@luffy-001 oldboy]# sed '$!d' person.txt 删除不是最后一行的所有行
105,feixue,CIO
[root@luffy-001 oldboy]#
替换
sed -i ‘s###g’ person.txt
-i 修改文件 -i.ori 表示自动备份(先备份在修改)
s 单独使用----> 将每一行匹配的字符进行替换
g 每一行全部替换----> sed指令s的替换标志之一(全局替换)
如何用sed进行变量替换
###将变量中的内容进行替换(只要考察单双引号的区别)
#设置变量
[root@luffy-001 oldboy]# x=oldboy
[root@luffy-001 oldboy]# y=oldgirl
[root@luffy-001 oldboy]#
#替换 使用 符号$
[root@luffy-001 oldboy]# sed 's#$x#$y#g' person.txt
101,oldboy,CEO 102,zhangyao,CTO
103,Alex,COO 104,yy,CFO 105,feixue,CIO
#必须要使用双引号
[root@luffy-001 oldboy]# sed "s#$x#$y#g" person.txt
101,oldgirl,CEO 102,zhangyao,CTO
103,Alex,COO 104,yy,CFO 105,feixue,CIO
单引号:所见即所得
双引号:与单引号类似,特殊符号会被解析 $ $() `` !
反向引用
()的功能可以记住正则表达式的一部分
扩展正则,使用 -r
\1 应用第一个小括号中的匹配内容,\2引用第二个小括号中的内容,sed最多可以记住9个
题目:ehco "i am oldboy teacher" 如果想保留这一行的单词oldboy
扩展
特殊符号 = 获取行号
[root@luffy-001 oldboy]# sed = person.txt
1
101,oldboy,CEO
2 3
102,zhangyao,CTO
4
103,Alex,COO
5 6
104,yy,CFO
7 8
105,feixue,CIO
一条sed 语句至此那个多条命令
每个 -e 选项后可以接一个sed指令
分号的使用
案例:一个文件100行,把5,35,70行单独拿出来
Linux三剑客-SED的更多相关文章
- Linux(8):linux三剑客sed和awk & Shell 编程(1)
linux 三剑客 之 sed # sed 是什么? # sed : 字符流编辑器 Stream Editor: sed 擅长 替换.取行等 # sed 的功能与版本: 处理纯文本文件.日志.配置文件 ...
- Linux三剑客sed
注意sed和awk使用单引号,双引号有特殊解释 sed是Stream Editor(字符流编辑器)的缩写,简称流编辑器. sed是操作.过滤和转换文本内容的强大工具. 常用功能包括结合正则表达式对文件 ...
- Linux实战教学笔记12:linux三剑客之sed命令精讲
第十二节 linux三剑客之sed命令精讲 标签(空格分隔): Linux实战教学笔记-陈思齐 ---更多资料点我查看 1,前言 我们都知道,在Linux中一切皆文件,比如配置文件,日志文件,启动文件 ...
- (转)不看绝对后悔的Linux三剑客之sed实战精讲
不看绝对后悔的Linux三剑客之sed实战精讲 原文:http://blog.51cto.com/hujiangtao/1923718 二.Linux三剑客之sed命令精讲 1,前言 我们都知道,在L ...
- Linux三剑客grep、awk、sed
何为Linux三剑客? 第一个剑客是 grep,grep 会根据正则表达式查找相关内容并打印对应的数据. 第二个剑客是 awk,awk 的名字来源于三个作者的名字简称,它可以根据定位到的数据行处理其中 ...
- Linux三剑客grep、awk和sed
grep,sed 和 awk是Linux/Unix 系统中常用的三个文本处理的命令行工具,称为文本处理三剑客.本文将简要介绍这三个命令并给出基本用法. 管道 在介绍这两个命令之前,有必要介绍一下Uni ...
- 性能工具之linux三剑客awk、grep、sed详解
前言 linux 有很多工具可以做文本处理,例如:sort, cut, split, join, paste, comm, uniq, column, rev, tac, tr, nl, pr, he ...
- day14 linux三剑客之sed命令
day14 linux三剑客之sed命令 sed命令 Sed 主要用来自动编辑一个或多个文件.简化对文件的反复操作.编写转换程序等. sed(流式编辑器) : sed主要用来修改文件. 1.sed命令 ...
- Linux 三剑客之sed
目录 Linux 三剑客之sed 命令补充: sort命令 uniq命令 cut命令 tr命令 wc命令 三剑客 - sed 编辑模式: 定位分类: 实例如下: d模式--删除模式 p模式--打印 a ...
随机推荐
- vb.net 数字大写
Private Function RMBChinese(ByVal Rmb As Double) As String Dim Rmbexp As String Dim Rmbda As String ...
- ajax实现跨域访问
ajax跨域访问是一个老生畅谈的问题啦,网上解决方法很多,discuz用的p3p协议,有兴趣的朋友可以了解下,比较常用的是JSONP方法,貌似目前这种方法只支持GET方式,不如POST方式安全. 即使 ...
- (4)Microsoft office Word 2013版本操作入门_插入图片及图片的排版
1.word中插入图片和文绕图 1.1插入图片 :点击[插入]-->[图片] 或者 [联机图片]从网上选择. 1.2文字环绕: [格式] --->点击[位置] .[自动换行] 进行图 ...
- EF实现增删改查
从来没想到过能在这个上面翻车,感慨自学没有培训来得系统啊,废话不多说 ORM:对象关系映射(Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),是一 ...
- meta标签的http-equiv与content解析
meta是html语言head区的一个辅助性标签,以下是meta的http-equiv属性和content属性的一些介绍. http-equiv属性 指示服务器在发送实际的文档之前,要在传送给浏览器的 ...
- Python模块之信号(signal)
在了解了Linux的信号基础之 后,Python标准库中的signal包就很容易学习和理解.signal包负责在Python程序内部处理信号,典型的操作包括预设信号处理函数,暂 停并等待信号,以及定时 ...
- Apache Beam WordCount编程实战及源码解读
概述:Apache Beam WordCount编程实战及源码解读,并通过intellij IDEA和terminal两种方式调试运行WordCount程序,Apache Beam对大数据的批处理和流 ...
- 无需ORM的数据库
DynamicDB是一种NoSQL数据库.一个实例下可以创建多种Database,一个Database中可以包含多个Collection(相当于关系型数据库中的Table),一个Collection中 ...
- java设计模式之模板模式以及钩子方法使用
1.使用背景 模板方法模式是通过把不变行为搬到超类,去除子类里面的重复代码提现它的优势,它提供了一个很好的代码复用平台.当不可变和可变的方法在子类中混合在一起的时候, 不变的方法就会在子类中多次出现, ...
- Android Studio多渠道打包(二)
虽然多渠道打包的方式有很多种,那么今天我要说的通过工具的形式进行多渠道打包 首先,打开Android studio,找到顶部Build,点开 选择红色部分,里面的编辑框可以帮助我们更快的熟悉Gradl ...