注意sed和awk使用单引号,双引号有特殊解释

sed是Stream Editor(字符流编辑器)的缩写,简称流编辑器。

sed是操作、过滤和转换文本内容的强大工具。

常用功能包括结合正则表达式对文件实现快速增删改查,其中查询的功能中最常用的两大功能是过滤(过滤指定字符串)、取行(取出指定行)。


语法:

  1. sed [选项] [sed内置命令字符] [输入文件]

选项:

参数选项 解释
-n 取消默认sed的输出,常与sed内置命令p一起用
-i 直接将修改结果写入文件,不用-i,sed修改的是内存数据
-e 多次编辑,不需要管道符了
-r 支持正则扩展

sed的内置命令字符用于对文件进行不同的操作功能,如对文件增删改查

sed常用内置命令字符

sed的内置命令字符 解释
a append,对文本追加,在指定行后面添加一行/多行文本
d Delete,删除匹配行
i insert,表示插入文本,在指定行前添加一行/多行文本
p Print ,打印匹配行的内容,通常p与-n一起用
s/正则/替换内容/g 匹配正则内容,然后替换内容(支持正则),结尾g代表全局匹配

sed匹配范围

范围 解释
空地址 全文处理
单地址 指定文件某一行
/pattern/ 被模式匹配到的每一行
范围区间 10,20 十到二十行10,+5第10行向下5行/pattern1/,/pattern2/
步长 1~2,表示1、3、5、7、9行2~2两个步长,表示2、4、6、8、10、偶数行

sed案例

准备测试数据

  1. [root@pylinux data]# cat -n luffycity.txt
  2. 1 My name is chaoge.
  3. 2 I teach linux.
  4. 3 I like play computer game.
  5. 4 My qq is 877348180.
  6. 5 My website is http://pythonav.cn.

1.输出文件第2,3行的内容

  1. [root@pylinux data]# sed -n '2,3p' luffycity.txt
  2. I teach linux.
  3. I like play computer game.


2.过滤出含有linux的字符串行

  1. #sed可以实现grep的过滤效果,必须吧要过滤的内容放在双斜杠中
  2. [root@pylinux data]# sed -n '/linux/p' luffycity.txt
  3. I teach linux.

3.删除含有game的行

注意sed想要修改文件内容,还得用-i参数

  1. [root@pylinux data]# sed '/game/d' luffycity.txt
  2. My name is chaoge.
  3. I teach linux.
  4. My qq is 877348180.
  5. My website is http://pythonav.cn.

想要将修改结果写入到文件,还得这么敲

  1. [root@pylinux data]# sed -i '/game/d' luffycity.txt #不会输出结果,直接写入文件

删掉2,3两行

  1. [root@pylinux data]# sed '2,3d' luffycity.txt

删除第5行到结尾

  1. [root@pylinux data]# sed '5,$d' luffycity.txt
  2. My name is chaoge.
  3. ----------
  4. I teach linux.
  5. ----------

4.将文件中的My全部替换为His

  • s内置符配合g,代表全局替换,中间的"/"可以替换为"#@/"等
  1. [root@pylinux data]# sed 's/My/His/g' luffycity.txt
  2. His name is chaoge.
  3. I teach linux.
  4. I like play computer game.
  5. His qq is 877348180.
  6. His website is http://pythonav.cn.

5.替换所有My为His,同时换掉QQ号为8888888

  1. [root@pylinux data]# sed -e 's/My/His/g' -e 's/877348180/88888/g' luffycity.txt
  2. His name is chaoge.
  3. I teach linux.
  4. I like play computer game.
  5. His qq is 88888.
  6. His website is http://pythonav.cn.

6.在文件第二行追加内容 a字符功能,写入到文件,还得添加 -i

  1. [root@pylinux data]# sed -i '2a I am useing sed command' luffycity.txt
  2. My name is chaoge.
  3. I teach linux.
  4. I am useing sed command
  5. I like play computer game.
  6. My qq is 877348180.
  7. My website is http://pythonav.cn.

添加多行信息,用换行符"\n"

  1. [root@pylinux data]# sed -i "3a i like linux very much.\nand you?" luffycity.txt
  2. [root@pylinux data]#
  3. [root@pylinux data]# cat -n luffycity.txt
  4. 1 My name is chaoge.
  5. 2 I teach linux.
  6. 3 I am useing sed command
  7. 4 i like linux very much.
  8. 5 and you?
  9. 6 I like play computer game.
  10. 7 My qq is 877348180.
  11. 8 My website is http://pythonav.cn.

在每一行下面插入新内容

  1. [root@pylinux data]# sed "a ----------" luffycity.txt
  2. My name is chaoge.
  3. ----------
  4. I teach linux.
  5. ----------
  6. I am useing sed command
  7. ----------
  8. i like linux very much.
  9. ----------
  10. and you?
  11. ----------
  12. I like play computer game.
  13. ----------
  14. My qq is 877348180.
  15. ----------
  16. My website is http://pythonav.cn.
  17. ----------

7.在第二行上面插入内容

  1. [root@pylinux data]# sed '2i i am 27' luffycity.txt
  2. My name is chaoge.
  3. i am 27
  4. ----------
  5. I teach linux.
  6. ----------
  7. I am useing sed command
  8. ----------
  9. i like linux very much.
  10. ----------
  11. and you?
  12. ----------
  13. I like play computer game.
  14. ----------
  15. My qq is 877348180.
  16. ----------
  17. My website is http://pythonav.cn.
  18. ----------

sed配合正则表达式企业案例

上一节是用grep -E 扩展正则表达式,这一节是用sed配合正则表达式使用

取出linux的IP地址

1.删除网卡信息

去头去尾法

交给管道符,一次去头,一次去尾

  1. 思路:
  2. 1.首先取出第二行
  3. [root@pylinux ~]# ifconfig | sed -n '2p'
  4. inet 10.141.32.137 netmask 255.255.192.0 broadcast 10.141.63.255
  5. 2.找到第二行后,去掉ip之前的内容
  6. [root@pylinux ~]# ifconfig eth0|sed -n '2s#^.*inet##gp'
  7. 10.141.32.137 netmask 255.255.192.0 broadcast 10.141.63.255
  8. 解释:
  9. -n是取消默认输出
  10. 2s是处理第二行内容
  11. #^.*inet## 是匹配inet前所有的内容
  12. gp代表全局替换且打印替换结果
  13. 3.再次处理,去掉ip后面的内容
  14. [root@pylinux tmp]# sed -n '2s/^.*inet//gp' ip.txt | sed -n 's/net.*$//gp'
  15. 10.141.32.137
  16. 解释:
  17. net.*$ 匹配net到结尾的内容
  18. s/net.*$//gp #把匹配到的内容替换为空

-e参数多次编辑

  1. [root@pylinux tmp]# ifconfig eth0 | sed -ne '2s/^.*inet//g' -e '2s/net.*$//gp'
  2. 10.141.32.137

Linux三剑客sed的更多相关文章

  1. Linux(8):linux三剑客sed和awk & Shell 编程(1)

    linux 三剑客 之 sed # sed 是什么? # sed : 字符流编辑器 Stream Editor: sed 擅长 替换.取行等 # sed 的功能与版本: 处理纯文本文件.日志.配置文件 ...

  2. Linux三剑客-SED

    1.Sed是什么 Sed:字符流编辑器,Stream Editor 2.Sed功能与版本 处理日志文件,日志,配置文件等 增加.删除.修改.查询 sed --version 可以通过man sed 来 ...

  3. Linux实战教学笔记12:linux三剑客之sed命令精讲

    第十二节 linux三剑客之sed命令精讲 标签(空格分隔): Linux实战教学笔记-陈思齐 ---更多资料点我查看 1,前言 我们都知道,在Linux中一切皆文件,比如配置文件,日志文件,启动文件 ...

  4. (转)不看绝对后悔的Linux三剑客之sed实战精讲

    不看绝对后悔的Linux三剑客之sed实战精讲 原文:http://blog.51cto.com/hujiangtao/1923718 二.Linux三剑客之sed命令精讲 1,前言 我们都知道,在L ...

  5. Linux三剑客grep、awk、sed

    何为Linux三剑客? 第一个剑客是 grep,grep 会根据正则表达式查找相关内容并打印对应的数据. 第二个剑客是 awk,awk 的名字来源于三个作者的名字简称,它可以根据定位到的数据行处理其中 ...

  6. Linux三剑客grep、awk和sed

    grep,sed 和 awk是Linux/Unix 系统中常用的三个文本处理的命令行工具,称为文本处理三剑客.本文将简要介绍这三个命令并给出基本用法. 管道 在介绍这两个命令之前,有必要介绍一下Uni ...

  7. 性能工具之linux三剑客awk、grep、sed详解

    前言 linux 有很多工具可以做文本处理,例如:sort, cut, split, join, paste, comm, uniq, column, rev, tac, tr, nl, pr, he ...

  8. day14 linux三剑客之sed命令

    day14 linux三剑客之sed命令 sed命令 Sed 主要用来自动编辑一个或多个文件.简化对文件的反复操作.编写转换程序等. sed(流式编辑器) : sed主要用来修改文件. 1.sed命令 ...

  9. Linux 三剑客之sed

    目录 Linux 三剑客之sed 命令补充: sort命令 uniq命令 cut命令 tr命令 wc命令 三剑客 - sed 编辑模式: 定位分类: 实例如下: d模式--删除模式 p模式--打印 a ...

随机推荐

  1. Word 段前分页是什么?怎么设置?

    描述 这两个标题在第一个标题的页中,且两个标题都没有独立分页.要让每一个标题独立分页,需要对标题的格式进行修改. 段前分页指的是标题与标题之间不在同一个页中,每一个标题都在独立的页中. 设置段前分页 ...

  2. HDFS的读写流程——宏观与微观

    HDFS的读写流程--宏观与微观 HDFS:分布式文件系统,负责存放数据 分布式文件系统:就是将我们的数据放到多台电脑上存储. 写数据:就是将客户端上的数据上传到HDFS 宏观过程 客户端向HDFS发 ...

  3. 从零开始Blazor Server(15)--总结

    我们用了14篇文章,基本上把一个后台管理系统需要的UI部分都说的差不多了.所以这套文章也该到了结束的时候了. 这里面有很多问题,比如我们直接使用UI来拉数据库信息而没有使用service,再比如我们大 ...

  4. java基础———break,continue

    break通常用在循环语句之中用来跳出循环: continue终止某次循环过程,跳过尚未执行的语句:接着执行下次是否执行循环的判定:

  5. CF-1684C - Column Swapping

    Problem - 1684C - Codeforces 题意: 现在有一个n*m的棋盘,每个棋子有一个值,你可以交换两列棋盘的棋子位置,使得每一行的棋子从左到右为非递减. 题解: 只需要判断一行不满 ...

  6. 如何守护数据安全? 这里有一份RDS灾备方案为你支招

    当今世界是一个充满着数据的互联网世界,生活的方方面面都在不断产生着数据,比如出行记录.消费记录.浏览的网页.发送的消息等等.除了文本类型的数据,图像.音乐.声音都是数据.对于企业而言,数据更是重要的生 ...

  7. Netty 学习(二):服务端与客户端通信

    Netty 学习(二):服务端与客户端通信 作者: Grey 原文地址: 博客园:Netty 学习(二):服务端与客户端通信 CSDN:Netty 学习(二):服务端与客户端通信 说明 Netty 中 ...

  8. 无线配置多一个路由器作为家庭wifi的无线热点?

    以下内容为本人的著作,如需要转载,请声明原文链接微信公众号「englyf」https://www.cnblogs.com/englyf/ 手头上有个 MERCURY 的破旧路由器,怎么配置它,让它作为 ...

  9. 发布日志- kratos v2.1.4 发布!

    v2.1.4 release https://github.com/go-kratos/kratos/releases/tag/v2.1.4 New Features feat(registry/co ...

  10. 在云原生中监控JVM指标

    一般 Java 集成 Prometheus 监控指标有两种方式.一种是依赖中引入,另外一种是通过agent执行. 依赖引入 <!-- The client --> <dependen ...