一、功能说明

Sed是Stream Editor(流编辑器)缩写,是操作、过滤和转换文本内容的强大工具。常用功能有增删改查,过滤,取行。

二、语法格式

Usage: sed [options] [sed-commands] [input-file]
                      选项           sed命令         出入文件

三、常用参数和选项

-n 取消默认的sed输出,常与sed内置命令的p连用
-i 直接修改文件内容,而不是输出到终端
-r 使用扩展正则表达式
-e 执行多条sed命令
-f 后接sed脚本文件名
a 在指定行后添加一行或多行文本
d 删除一行或多行文本
i 在指定行前添加一行或多行文本
p 打印匹配行的内容
c 用新行取代旧行
s 替换指定字符
l 输出不可见字符
g 获得内存缓冲区的内容,并替代当前模板块中的文本
& 匹配到的文本
e 将输出内容当做bash命令执行
n 清空当前模式空间,然后读取下一行
N 追加下一个输入行到模板块后面并在二者间嵌入一个新行
= 列出行数

四、使用范例

1、实验文本

  1. [root@WT data]# cat test.txt
  2. ,xiaoming,CEO
  3. ,zhangsan,CTO
  4. ,wangwu,COO
  5. ,gg,CFO
  6. ,xiaobai,CIO

2、增删改查

2.1、增

  a  在指定文本行后添加一行或多行文本

  i   在指定文本行前添加一行或多行文本

2.1.1、增加单行文本
  1. [root@WT data]# sed '2a 106,huahua,yuangong' test.txt
  2. ,xiaoming,CEO
  3. ,zhangsan,CTO
  4. ,huahua,yuangong
  5. ,wangwu,COO
  6. ,gg,CFO
  7. ,xiaobai,CIO
  8. [root@WT data]# sed '2i 106,huahua,yuangong' test.txt
  9. ,xiaoming,CEO
  10. ,huahua,yuangong
  11. ,zhangsan,CTO
  12. ,wangwu,COO
  13. ,gg,CFO
  14. ,xiaobai,CIO
2.1.2、增加多行文本
  1. [root@WT data]# sed '2a 106,huahua,yuangong\n107,fengxue,zhuguan' test.txt
  2. ,xiaoming,CEO
  3. ,zhangsan,CTO
  4. ,huahua,yuangong
  5. ,fengxue,zhuguan
  6. ,wangwu,COO
  7. ,gg,CFO
  8. ,xiaobai,CIO
  9. [root@WT data]# sed '2i 106,huahua,yuangong\n107,fengxue,zhuguan' test.txt
  10. ,xiaoming,CEO
  11. ,huahua,yuangong
  12. ,fengxue,zhuguan
  13. ,zhangsan,CTO
  14. ,wangwu,COO
  15. ,gg,CFO
  16. ,xiaobai,CIO

2.2、删

  d  删除一行或多行文本
2.2.1、删除文件全部文本内容
  1. [root@WT data]# sed 'd' test.txt
  2. [root@WT data]#
2.2.2、删除指定一行的文本
  1. [root@WT data]# sed '2d' test.txt
  2. ,xiaoming,CEO
  3. ,wangwu,COO
  4. ,gg,CFO
  5. ,xiaobai,CIO
2.2.3、删除指定的多行文本
  1. [root@WT data]# sed '2,3d' test.txt
  2. ,xiaoming,CEO
  3. ,gg,CFO
  4. ,xiaobai,CIO
2.2.4、删除某行及之后的所有文本
  1. [root@WT data]# sed '3,$d' test.txt
  2. ,xiaoming,CEO
  3. ,zhangsan,CTO
2.2.5、从某行开始删除间隔为N的行
  1. [root@WT data]# sed '1~2d' test.txt
  2. ,zhangsan,CTO
  3. ,gg,CFO
2.2.6、从删除某行以及删除此行后面的N行
  1. [root@WT data]# sed '1,+2d' test.txt
  2. ,gg,CFO
  3. ,xiaobai,CIO
2.2.7、删除有指定字符串的行
  1. [root@WT data]# sed '/xiaoming/d' test.txt
  2. ,zhangsan,CTO
  3. ,wangwu,COO
  4. ,gg,CFO
  5. ,xiaobai,CIO
2.2.8、删除指定“字符1”到指定“字符串2”的行
  1. [root@WT data]# sed '/xiaoming/,/wangwu/d' test.txt
  2. ,gg,CFO
  3. ,xiaobai,CIO
2.2.9、删除指定字符串的行到第N行
  1. [root@WT data]# sed '/xiaoming/,3d' test.txt
  2. ,gg,CFO
  3. ,xiaobai,CIO

2.3、改

2.3.1、修改指定的行

c  用新行取代旧行

  1. [root@WT data]# sed '1c 100,xiaoming02,CEO' test.txt
  2. ,xiaoming02,CEO
  3. ,zhangsan,CTO
  4. ,wangwu,COO
  5. ,gg,CFO
  6. ,xiaobai,CIO
2.3.2、文本替换

s  替换指定字符
g 获得内存缓冲区的内容,并替代当前模板块中的文本
-i 直接修改文件内容,而不是输出到终端

sed文本替换说明

  1. sed -i 's/▇/▲/g' xxx.txt
  2. sed -i 's#▇#▲#g' xxx.txt

1、两边是引号,引号里面的两边分别为s和g,中间是三个一样的字符/或#作为定界符。#能在替换内容包含/有助于区别。定界符可以是任意符号如:或|等,但当替换内容包含定界符时,需转义即: |。这里建议使用#作为定界符。
2、定界符/或#,第一个和第二个之间的就是被替换的内容,第二个和第三个之间的就是替换后的内容。
3、s#▇#▲#g,▇能用正则表达式,但▲不能用,必须是具体的。
4、默认sed软件是对模式空间(内存中的数据)操作,而-i选项会更改磁盘上的文件内容。

  1. [root@WT data]# sed 's#xiaoming#xiaoming02#g' test.txt
  2. ,xiaoming02,CEO
  3. ,zhangsan,CTO
  4. ,wangwu,COO
  5. ,gg,CFO
  6. ,xiaobai,CIO
2.3.3、指定行进行文本替换
  1. [root@WT data]# sed '1s#101#100#g' test.txt
  2. ,xiaoming,CEO
  3. ,zhangsan,CTO
  4. ,wangwu,COO
  5. ,gg,CFO
  6. ,xiaobai,CIO
2.3.4、分组替换\(\)和\1的使用说明

sed流编辑器的\(\)最多可以使用9个,\(\)里面可以使用正则表达式,\1表示第一个\(\)匹配到的内容,\2以此类推。

  1. [root@WT data]# echo "101,xiaoming,CEO"|sed -nr 's#^.*,(.*),CEO$#\1#gp'
  2. xiaoming
2.3.5、&符号的使用说明

  &表示用sed匹配到的文本

  范例说明,把test.txt文件名改为test.dat

  1. [root@WT data]# ls|sed -nr 's#(.*).txt#&#gp'
  2. test.txt
  3. [root@WT data]# ls|sed -nr 's#(.*).txt#\1,&#gp'
  4. test,test.txt
  5. [root@WT data]# ls|sed -nr 's#(.*).txt#mv & \1.dat#gp'
  6. mv test.txt test.dat
  7. [root@WT data]# ls|sed -nr 's#(.*).txt#mv & \1.dat#gp'|bash
  8. [root@WT data]# ls
  9. test.dat

2.4、查

  p  输入匹配行的内容,默认sed会输出一次,加上p之后就会输出两次,所有n取消sed的默认输出。

2.4.1、按行查询
  1. [root@WT data]# sed '5p' test.txt
  2. ,xiaoming,CEO
  3. ,zhangsan,CTO
  4. ,wangwu,COO
  5. ,gg,CFO
  6. ,xiaobai,CIO
  7. ,xiaobai,CIO
  8. [root@WT data]# sed -n '5p' test.txt
  9. ,xiaobai,CIO
2.4.2、输出指定范围的行
  1. [root@WT data]# sed -n '1,2p' test.txt
  2. ,xiaoming,CEO
  3. ,zhangsan,CTO
2.4.3、从某行开始依次输出间隔为N的行
  1. [root@WT data]# sed -n '1~2p' test.txt
  2. ,xiaoming,CEO
  3. ,wangwu,COO
  4. ,xiaobai,CIO
2.4.4、输出全部的行
  1. [root@WT data]# sed -n 'p' test.txt
  2. ,xiaoming,CEO
  3. ,zhangsan,CTO
  4. ,wangwu,COO
  5. ,gg,CFO
  6. ,xiaobai,CIO
2.4.5、输出指定字符串的行
  1. [root@WT data]# sed -n '/gg/p' test.txt
  2. ,gg,CFO
2.4.6、其他查询方法
  1. [root@WT data]# sed -n '1,/COO/p' test.txt
  2. ,xiaoming,CEO
  3. ,zhangsan,CTO
  4. ,wangwu,COO

3、内容另存为

w  把sed模式空间的内容另存为一个新文件中

  1. [root@WT data]# cat num.txt
  2.  
  3. [root@WT data]# sed 's#1#0#g;w output.txt' num.txt
  4.  
  5. [root@WT data]# cat output.txt

4、执行命令

e  把模式空间的内容当作bash执行

  1. [root@WT data]# ls|sed -nr 's#(.*).txt#mv & \1.dat#gpe'
  2. mv test.txt test.dat
  3. [root@WT data]# ls
  4. test.dat

5、一条sed语句执行多个命令

-e或";"分号  执行多条sed语句的命令

  1. [root@WT data]# sed -e 's#101#100#g' -e 's#105#500#g' test.txt
  2. ,xiaoming,CEO
  3. ,zhangsan,CTO
  4. ,wangwu,COO
  5. ,gg,CFO
  6. ,xiaobai,CIO
  7. [root@WT data]# sed 's#101#100#g;s#105#500#g' test.txt
  8. ,xiaoming,CEO
  9. ,zhangsan,CTO
  10. ,wangwu,COO
  11. ,gg,CFO
  12. ,xiaobai,CIO

6、n的使用说明

  1. [root@WT data]# cat test.txt
  2. ,xiaoming,CEO
  3. ,zhangsan,CTO
  4. ,wangwu,COO
  5. ,gg,CFO
  6. ,xiaobai,CIO
  7. [root@WT data]# sed -n 'n;p' test.txt
  8. ,zhangsan,CTO
  9. ,gg,CFO

7、"="的使用说明

  1. [root@WT data]# sed '=' test.txt
  2.  
  3. ,xiaoming,CEO
  4.  
  5. ,zhangsan,CTO
  6.  
  7. ,wangwu,COO
  8.  
  9. ,gg,CFO
  10.  
  11. ,xiaobai,CIO

Linux三剑客之sed流编辑器的更多相关文章

  1. Linux下的sed流编辑器命令详解

    sed是stream editor的简称,也就是流编辑器.它一次处理一行内容,处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内 ...

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

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

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

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

  4. day14 linux三剑客之sed命令

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

  5. 【linux三剑客】sed命令

    sed - stream editor for filtering and transforming text sed 流编辑器 strem edition,实现对文件的增删改替换查是Linux中第二 ...

  6. Linux 三剑客之sed

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

  7. Linux sed 流编辑器

    sed是stream editor的简称,也就是流编辑器.盗用一张图片解释原理 命令格式: SYNPPSIS: sed [OPTION]… {script-only-if-no-other-scrip ...

  8. Linux 三剑客 -- awk sed grep

    本文由本人收集整理自互联网供自己与网友参考,参考文章均已列出,如有侵权,请告知! 顶配awk,中配sed,标配grep awk 参考 sed 参考 grep 参考 在线查看linux命令速记表 app ...

  9. Linux三剑客grep/sed/awk

    grep/sed/awk被称为linux的“三剑客” grep更适合单纯的查找或匹配文本: sed更适合编辑匹配到的文本: awk更适合格式化文本,对文本进行较复杂各式处理: Grep --color ...

随机推荐

  1. 023.掌握Pod-Pod扩容和缩容

    一 Pod的扩容和缩容 Kubernetes对Pod的扩缩容操作提供了手动和自动两种模式,手动模式通过执行kubectl scale命令或通过RESTful API对一个Deployment/RC进行 ...

  2. useReducer的基本使用

    import React, { useReducer } from 'react'; function Reducers () { const [count,dispatch] = useReduce ...

  3. 投票通过,PHP 8 确认引入 Union Types 2.0

    关于是否要在 PHP 8 中引入 Union Types 的投票已于近日结束,投票结果显示有 61 名 PHP 开发组成员投了赞成票,5 名投了反对票. 还留意到鸟哥在投票中投了反对票~) 因此根据投 ...

  4. Android加载大量图片内存溢出解决办法

    当我们在做项目过程中,一遇到显示图片时,就要考虑图片的大小,所占内存的大小,原因就是Android分配给Bitmap的大小只有8M,试想想我们用手机拍照,普通的一张照片不也得1M以上,所以androi ...

  5. 20191010-5 alpha week 1/2 Scrum立会报告+燃尽图 03

    此作业要求参见[https://edu.cnblogs.com/campus/nenu/2019fall/homework/8748] 一.小组情况 队名:扛把子 组长:迟俊文 组员:宋晓丽 梁梦瑶 ...

  6. 百度杯 十一月 的一道pwn题复现

    拿到题后,就直接开鲁.. /ctf/pwn# checksec pwnme [*] '/ctf/pwn/pwnme' Arch: amd64--little RELRO: Full RELRO Sta ...

  7. python3 之 字符串编码小结(Unicode、utf-8、gbk、gb2312等)

    python3 解释器默认编码为Unicode,由str类型进行表示.二进制数据使用byte类型表示. 字符串通过编码转换成字节串,字节码通过解码成为字符串. encode:str-->byte ...

  8. linux常规网卡配置正确,但是出不了路由的解决方法

    netstat -rn #查看是网关  route add default gw 192.168.128.2 dev eth0  # 手动加入网关地址   此类情况容易出现在双网卡配置后

  9. 实战webpack系列说明

    01.概念股 本质上,webpack 是一个现代 JavaScript 应用程序的静态模块打包器(module bundler). 当 webpack 处理应用程序时,它会递归地构建一个依赖关系图(d ...

  10. NSAttributedString可以强制转换为NSMutableAttributedString类型吗?下面这代码有什么问题 为什么报错

    -(void)insetEmotion:(EmotionModel*)emotionModel{ if(emotionModel.code){ /** 在TextView中插入图片首选要知道光标的位置 ...