文章目录

  • 一、命令介绍
  • 二、命令格式
  • 三、常用选项
  • 四、sed 子命令
  • 五、sed 替换标记
  • 六、sed 元字符集
  • 七、命令示例
    • (一)用指定的字符串替换掉指定的字符串
    • (二)删除文档中的空白行
    • (三)删除文档中的注释
    • (四)显示文档中除了首行的所有内容
    • (五)查看包含指定字符串的行
    • (六)删除每行行尾的空白字符
    • (七)删除文档中的指定的字符串
    • (八)查看文档中指定行的内容
    • (九)本地修改文件内容
  • 八、参考文献

一、命令介绍

sed 是一种流编辑器,它是文本处理中常用的工具,能够完美的配合正则表达式使用,功能不同凡响。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用 sed 命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出或者使用选项 -i/-Ised 主要用来自动编辑一个或多个文件,简化对文件的反复操作,编写转换程序等。

二、命令格式

sed [options] 'command' file(s)
sed [options] -f scriptfile file(s)

三、常用选项

选项 说明
-e<script>--expression=<script> 以选项中所指定的 script 来处理输入的文本文件,不写 -e,直接跟着脚本也可以执行
-f<script文件>--file=<script文件> 以选项中指定的 script 文件来处理输入的文本文件
-I<扩展名> 就地编辑文件,以指定的扩展名保存备份。如果提供零长度扩展名,则不会保存备份。不建议在就地编辑文件时提供零长度扩展名,因为在磁盘空间耗尽等情况下,可能会导致新创建的文件被损坏或内容不完整
-i<扩展名> -I 类似,就地编辑文件,但将每个文件独立于其他文件进行处理。特别是,每个文件中的行号从1开始,$ 地址与当前文件的最后一行匹配,并且地址范围仅限于当前文件。最终结果就像每个文件都由单独的 Sed 实例编辑一样
-h--help 显示帮助
-n--quiet--silent 仅显示 script 处理后的结果,也就是取消自动打印模式空间。sed 处理文本的时候会把被处理的文本缓存在模式空间中,如果不加这个选项,默认会把模式空间的内容打印出来,就会出现重复的情况
-V--version 显示版本信息

四、sed 子命令

命令 说明
a\ 在当前行下面插入文本
i\ 在当前行上面插入文本
c\ 把选定的行改为新的文本
d 删除,删除选择的行
D 删除模板块的第一行
s 替换指定字符
h 拷贝模板块的内容到内存中的缓冲区
H 追加模板块的内容到内存中的缓冲区
g 获得内存缓冲区的内容,并替代当前模板块中的文本
G 获得内存缓冲区的内容,并追加到当前模板块文本的后面
l 列表不能打印字符的清单
n 读取下一个输入行,用下一个命令处理新的行而不是用第一个命令
N 追加下一个输入行到模板块后面并在二者间嵌入一个新行,改变当前行号码
p 打印模板块的行
P 大写的 P 打印模板块的第一行
q 退出Sed
b lable 分支到脚本中带有标记的地方,如果分支不存在则分支到脚本的末尾
r file 从file中读行
t label if分支,从最后一行开始,条件一旦满足或者T,t命令,将导致分支到带有标号的命令处,或者到脚本的末尾
T label 错误分支,从最后一行开始,一旦发生错误或者T,t命令,将导致分支到带有标号的命令处,或者到脚本的末尾
w file 写并追加模板块到file末尾
W file 写并追加模板块的第一行到file末尾
! 表示后面的命令对所有没有被选定的行发生作用
= 打印当前行号码
# 把注释扩展到下一个换行符以前

五、sed 替换标记

命令 说明
g 表示行内全面替换
p 表示打印行
w 表示把行写入一个文件
x 表示互换模板块中的文本和缓冲区中的文本
y 表示把一个字符翻译为另外的字符(但是不用于正则表达式)
\1 子串匹配标记,引用前面第 1 个小括号的内容。例如,s/\(love\)able/\1rs/s 表示替换的指令,第 1 个双正斜杠 // 之间的内容是被替换的内容,\1 引用前面小括号的内容,也就是 love,所以替换的字符串就是 lovers,于是 loveable 被替换成 lovers
& 已匹配字符串标记

六、sed 元字符集

表达式 说明
^ 匹配行开始的位置。例如,/^sed/ 匹配所有以sed开头的行。
$ 匹配行结束的位置。例如,/sed$/ 匹配所有以sed结尾的行。
. 匹配非换行符的任意一个字符,例如,/s.d/ 匹配 s 后面跟着任意一个字符,最后是 d 的字符串。
* 表示之前的字符连续出现任意次数(包括 0 次)将会被匹配到。例如,/*sed/ 匹配前面有任意个空格的字符串 sed。
[] 表示指定范围内的任意单个字符,例如,/[sS]ed/ 匹配 sed 和 Sed。
[^] 表示不在指定范围内的任意单个字符。
& 保存搜索字符用来替换其他字符,例如,s/love/ **&**/love 被替换成 **love**
\< 匹配单词的开始位置,例如,/\<love/ 匹配以 love 开头的单词。
\> 匹配单词的结束位置,例如,/love\>/ 匹配以 love 结尾的单词。
x\{m\} 重复字符 x,m次,例如,/0\{5\}/ 匹配 00000
x\{m,\} 重复字符 x,至少 m 次,例如,/0\{5,\}/ 匹配 000000000000000000 等。
x\{m,n\} 重复字符 x,至少 m 次,最多 n 次。

七、命令示例

(一)用指定的字符串替换掉指定的字符串

如下例子,执行指定替换脚本,这个脚本其实是一个替换指令,结合了正则表达式去匹配目标,然后替换成指定的内容。

将文档 example.txt 中的 “string1” 替换成 “string2”:

sed -e 's/string1/string2/g' example.txt

注:选项 -e 可以省略掉

用单个零替换多个零,即多个零替换成单个零,即多个零被替换成单个零,即单个零替换掉多个零:

sed -e 's/000*/0/g' example.txt

注:不是真的把文档中指定的内容替换掉,只是输出到终端的内容是替换之后的内容

(二)删除文档中的空白行

将文档 example.txt 的空白行删除:

sed '/^$/d' example.txt

注意:不是真的删除文档内容,只是输出到终端显示的内容是删除后的内容,换句话说仅作用于输出的内容。

我这里有个 txt 文件,先看看内容:

[root@htlwk0001host ~]# cat -n test/text.txt1   The tempo of modern civilization has been much quickened in the last twenty years。2  Whilestring1 witnessingstring1 the dramatic changes in the better-off society,3   # people begin to reconsider thestring1 question of "survival"。 "Survival" in the old4     se5    6   nse does not bother us anymore。string1 , we are more concerned about how to7    #"survive" in the human world full of petition。

我们看到第 5 行是空白行,我们再执行下面这个删除空白行的命令:

[root@htlwk0001host ~]# sed '/^$/d' test/text.txt
The tempo of modern civilization has been much quickened in the last twenty years。Whilestring1 witnessingstring1 the dramatic changes in the better-off society,# people begin to reconsider thestring1 question of "survival"。 "Survival" in the oldse
nse does not bother us anymore。string1 , we are more concerned about how to#"survive" in the human world full of petition。

我们看到了,空白行已经被删除了,那么实际的文档中是不是真的删除了呢,其实并没有,重复的内容我就不展示了。

(三)删除文档中的注释

删除文档 example.txt 中所有的注释内容和空白行:

sed '/ *#/d; /^$/d' example.txt

注:*# 可以匹配到文档的所有 #* 表示前面的空格匹配任意个;d 会把含有 # 的行整行删掉;^$ 匹配空白行,匹配到后执行删除指令 d,即把空行删除;分号 ; 表示目录的串行,即前面一个命令执行完后接着执行后面的命令

其实上面这个脚本不够精确,因为把含有 # 的行整行删除显然是极端的,实际应该把 # 到行尾之间的内容删除才合理,所以应该执行下面的脚本:

[root@htlwk0001host ~]# sed 's/^ *#.*$/d' test/text.txt
The tempo of modern civilization has been much quickened in the last twenty years。Whilestring1 witnessingstring1 the dramatic changes in the better-off society,sense does not bo

(四)显示文档中除了首行的所有内容

sed -e '1d' result.txt

注:1 表示第 1 行,显然 2 就表示第 2 行,d 把匹配到的行删除。

(五)查看包含指定字符串的行

查看包含字符串 string1 的行:

[root@htlwk0001host ~]# sed -n '/string1/p' test/text.txtWhilestring1 witnessingstring1 the dramatic changes in the better-off society,people begin to reconsider thestring1 question of "survival"。 "Survival" in the oldsense does not bother us anymore。string1 Instead, we are more concerned about how to
[root@htlwk0001host ~]#

-n 表示取消自动打印模式空间,p 表示打印行,去掉 -n 就会把模式空间的内容也打印出来,如下所示:

[root@htlwk0001host ~]# sed  '/string1/p' test/text.txt
The tempo of modern civilization has been much quickened in the last twenty years。Whilestring1 witnessingstring1 the dramatic changes in the better-off society,Whilestring1 witnessingstring1 the dramatic changes in the better-off society,people begin to reconsider thestring1 question of "survival"。 "Survival" in the oldpeople begin to reconsider thestring1 question of "survival"。 "Survival" in the oldsense does not bother us anymore。string1 Instead, we are more concerned about how tosense does not bother us anymore。string1 Instead, we are more concerned about how to"survive" in the human world full of petition。

(六)删除每行行尾的空白字符

sed -e 's/ *$//' example.txt

s 表示替换,* 表示任意数量,* 前面是空格,表示匹配任意个空格,$ 表示行尾的位置,说明是匹配行尾的任意个空白字符(空格),然后替换成第 2 个双正斜杠 // 之间的内容,此内容为空,所以替换后就相当于删除了所有行尾的空格。

(七)删除文档中的指定的字符串

删除文档中所有字符串 string1:

sed -e 's/string1//g' example.txt

(八)查看文档中指定行的内容

查看文档中从第 1行到第 5 行的内容:

[root@htlwk0001host ~]# sed -n '1,5p;5q' test/text.txt
The tempo of modern civilization has been much quickened in the last twenty years。Whilestring1 witnessingstring1 the dramatic changes in the better-off society,people begin to reconsider thestring1 question of "survival"。 "Survival" in the oldsense does not bother us anymore。string1 Instead, we are more concerned about how to"survive" in the human world full of petition。

后面这个 5q 是啥意思??

查看第 5 行:

[root@htlwk0001host ~]# sed -n '5p;5q' test/text.txt"survive" in the human world full of petition。

(九)本地修改文件内容

将文件 text2.txt 内的多个 0 替换成 lwx,并且备份原文件,且在原文件扩展名后加上 bk 作为备份文件的扩展名:

[root@htlwk0001host test]# sed  -ibk 's/000*/lwx/g' text2.txt

执行完上述命令后,原文件内容被真实修改了,而且多出一个原文件的备份文件:

[root@htlwk0001host test]# lstext2.txt  text2.txtbk

八、参考文献

在线工具

AWK程序设计语言

Linux 命令之 sed -- 功能强大的流式文本编辑器相关推荐

  1. editplus字符转16进制_EditPlus–一款小巧功能强大的老牌代码文本编辑器

    这是一款小巧功能强大的老牌代码文本编辑器,可处理文本.网页和程序语言的文字编辑器,也可以将它作为C/Java/Php等语言的简单IDE调试编辑工具 软件功能 语法突出显示 EditPlus默认支持功能 ...

  2. python实现linux命令输出两列_Python实现Linux命令xxd -i功能

    def Xxdi(): #解析命令行选项及参数 ([base, cols, strip], [inFile, outFile]) = ParseOption() import os if os.pat ...

  3. linux编译python语言指令_Python实现Linux命令xxd -i功能

    一. Linux xxd -i功能 Linux系统xxd命令使用二进制或十六进制格式显示文件内容.若未指定outfile参数,则将结果显示在终端屏幕上:否则输出到outfile中.详细的用法可参考li ...

  4. 手势控制幻灯片播放html,FlexSlider|功能强大的响应式jQuery幻灯片插件

    FlexSlider是一款功能强大的响应式jQuery幻灯片插件.该幻灯片插件可以制作为带缩略图模式,旋转木马模式等.它可以自适应屏幕大小,并可以制作多种幻灯片过渡特效.它的兼容性强,可以兼容IE7+ ...

  5. Linux命令之sed使用入门概述

    sed:stream editor,Linux的一款流编辑器,主要对文本内容进行过滤与替换.使用命令man sed,可以看到对sed命令的介绍 下文总体指导思想: 对于sed的工作过程,个人认为如果不 ...

  6. 每日linux命令学习-sed

    Linux的文本处理实用工具主要由sed和awk命令,二者虽然略有差异,但都使用正则表达式,默认使用标准I/O,并且使用管道命令可以将前一个命令的输出作为下一个命令的输入.笔者将在本节学习sed命令. ...

  7. linux命令分析---SED (二)

    SED单行脚本快速参考(Unix 流编辑器) 英文标题:USEFUL ONE-LINE SCRIPTS FOR SED (Unix stream editor) 原标题:HANDY ONE-LINER ...

  8. linux命令:find、打包解包、vi编辑器、用户权限

    搜索命令 1.find 搜索 1.1 目标 通过find命令 在特定目录下(包含它的后代目录) 搜索 符合条件的文件 1.2 实现 : 在指定目录中 根据名称 搜索 命令格式 序号 命令格式 作用 0 ...

  9. java字节码编辑工具_2200 Star!功能强大的 Java 字节码编辑器!

    [导语]:Recaf是一款功能十分强大的Java字节码编辑器,基于objectweb的ASM构建,可以更好地显示文件的属性,并为字节码编辑提供方便. 简介 Recaf是一个易于使用的现代的Java字节 ...

最新文章

  1. DP之最优二叉查找树
  2. [EffectiveC++]item41:了解隐式接口和编译期多态
  3. height:auto 火狐没边框
  4. jzoj6804-NOIP2020.9.26模拟jerry【dp】
  5. Java中的迭代器设计模式–示例教程
  6. apriori算法代码_资源 | 《机器学习实战》及代码(基于Python3)
  7. orbslam算法框架
  8. linux搭建dlna媒体服务器,群晖安装DLNA简单配置打造媒体服务器
  9. 怎么样用计算机计算三角函数,怎样在科学计算器上计算三角函数
  10. 微信开放平台修改微信分享的小图标后,移动端显示的分享的小图标未改变的问题解决
  11. 增加PRODUCT_BOOT_JARS及类
  12. 使用transition实现图片轮播效果
  13. Xcode 下载真机包调试
  14. 鹏业软件打开图纸显示内存不足问题解决
  15. 迅雷“回归”引发的IOS上架痛点思考
  16. Java实现redis消息队列发布/订阅模式
  17. STM32基于I2C温湿度采集
  18. 科大晋校第四次周训(C语言网)
  19. java 线程池技术_JAVA36计之---线程池技术
  20. 经验小波MATLAB,EWT 新开发出来的经验模态小波变换工具及其例程。 matlab 276万源代码下载- www.pudn.com...

热门文章

  1. jvm高并发_在JVM上对高并发HTTP服务器进行基准测试
  2. maven 父maven_Maven神秘化
  3. 侬娜·杰尔_杰尔·地狱
  4. 愚弄dnn_不要被泛型和向后兼容性所愚弄。 使用泛型类型
  5. glass fish_Glass Fish 4.0.1中的Jersey SSE功能
  6. Spring再次涵盖了您:继续进行消费者驱动的消息传递合同测试
  7. 可见性得以保障,并不意味着_战略模式并不意味着春天!
  8. 建立无服务器的“ Hello World”功能
  9. spring不自动下载_Spring:自动接线或不自动接线
  10. 使用OAuth2令牌的安全REST服务