热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

文本处理三剑客之sed详细用法–实例

sed常用参数-e多条件编辑-r支持扩展正则表达式-n只显示匹配出的行-f指定sed脚本-i直接修改源文件显示文件行号

sed
常用参数
-e 多条件编辑

-r 支持扩展正则表达式-

n 只显示匹配出的行

-f 指定sed脚本

-i 直接修改源文件

= 显示文件行号

行号范围
x x为行号

x,y 表示行号从x到y

/pattern 查询包含模式的行

/pattern /pattern 查询包含两个模式的行

pattern/,x 在给定行号上查询包含模式的行

x,/pattern/ 通过行号和模式查询匹配的行

x,y! 查询不包含指定行号x和y的行

举例说明
(test.txt为测试文件)

查找
1.打印出文件中第二行,默认会全部输出,加-n只打印匹配行,!为取反

sed '2p' test.txt

sed -n '2p' test.txt

sed -n '2!p' test.txt (除了2行)

2.打印1-3行

sed -n '1,3p' test.txt

3.将文件的第一行删除后输出到屏幕

sed '1d' test.txt

4.sed默认不修改原文件,如果想修改原文件得加-i

sed -i '1d' test.txt

删除
1.删除指定范围的行(第1行到第3行)

sed '1,3d' test.txt

2.删除第3行到下两行之间的内容

sed '3,+2d' test.txt

3.删除第3行到最后行的内容

sed '3,$d' test.txt

4.删除最后一行的内容

sed '$d' test.txt

5.跨奇数行删除

sed '1~2d' test.txt

6.跨偶数行删除

sed '2~2d' test.txt

7.从第3行开始跨偶数行删除

sed '3~2d' test.txt

8.删除包含"name"的行

sed '/name/d' test.txt

9.删除包含"name"到最后的行

sed '/name/,$d' test.txt

10.删除包含"name"到下俩行的行

sed '/name/,+2d' test.txt

11.删除空行

sed '/^$/d' test.txt

查找替换
(使用s命令将查找到的文本替换为新的文本,默认情况只替换第一次匹配到的内容)

1.将line替换为大写的LINE

sed 's/line/LINE/' test.txt

2.如果想只替换第二个匹配到的line为LINE

sed 's/line/LINE/2' test.txt

3.使用g选项,可以完成所有匹配值的替换

sed 's/line/LINE/g' test.txt

4.将以this开头的this替换为that

sed 's/^this/that/' test.txt

5.将符合"," 换成"-"

sed -n 's/,/-/gp' test.txt

6.如果删除每一行的第一个字符应该怎么做?

sed 's/^.//g' test.txt

7.在匹配到name的行,将行首第一个字母替换为*

sed '/name/s/^./*/' test.txt

字符转换
(使用y命令可以进行字符转换,其作用为将一系列字符逐个地变换为另外一系列字符)

1.将ABCD转换为1234

sed 'y/ABCD/1234/' test.txt

插入文本
(使用i或a命令插入文本,其中i代表在匹配行之前插入,而a代表在匹配行之后插入)

1.使用i在第二行前插入文本

sed '2 i Insert' test.txt

2.使用a在第二行后插入文本

sed '2 a append' test.txt

3.在匹配的上一行插入文本

sed '/Second/i\Insert' test.txt

4.如果要同时新增多行,则每行之间要用反斜杠\n来进行新行的添加

sed '2 a\append1\nappend2\nappend3' test.txt

5.在匹配到how的句子后面添加一句:I'm fine.

sed "/how/s/$/ I'm fine/" test.txt

6.如何添加双引号呢

sed '/how/aI"m fine.' test.txt

取代行
(c命令,c的后面可以接字符串,这些字符串可以取代n1,n2之间的行)

sed '2,4c this is 2-4 line' test.txt

读入文本
(使用r命令可从其他文件中读取文本,并插入匹配行之后)

1.将/etc/passwd中的内容读出放到test.txt空行之后

sed '/^$/r /etc/passwd' test.txt

打印
(使用p命令进行打印,使用sed命令时一般都加-n参数,表示不打印没关系的行)

(不加-n参数,会输出所有行,找到的行会重复显示)

1.只打印匹配到the的这行

sed -n '/the/p' test.txt

2.当用到sed不同的编辑命令时,可以用{ },不同的编辑命令之间用分号隔开

sed -n "/the/{=;p}" test.txt

3.打印前5行

sed '5q' test.txt

4.打印出匹配first的行到第4行

sed -n '/First/,4p' test.txt

5.打印出不包含line的行

sed -n '/line/!p' test.txt

6.将全文的this改成THAT,并删除所有空行

sed 's/this/that/g; /^$/d' test.txt

总结
sed 默认不对原文件执行操作,如果想生效,则使用-i

而且默认全部打印输出,如果想只打印匹配到的行,用p,前面加上-n 参数

删除:d,定点删除,从哪里到哪里删除,删除开头,结尾等。

跨奇数、偶数删除、包括单词的行删除

查找替换: s///,s@@@,s###,s&&&,等符号,都可以使用。

字符转换:y/// 但注意的是,新的字符必须和旧的字符长度相同,否则无法使用。

插入文本: i insert: 匹配行前边, a append: 匹配行后边。

添加多行,注意使用\n 换行符。

取代行:选择到 几行到几行之后, 然后用c 后面就可以用一句话代替

\u : 就是表示把第一个字符转化成大写字母。

uppercase\l : 表示小写

& : 就是表示匹配前面正则表达式的那部分

\b : 匹配一个单词边界,也就是指单词和空格间的位置

练习题
1.删除/etc/grub2.cfg文件中所有以空白开头的行,思考如果向要删除这些空白字符应该怎么做?

sed '/^[[:space:]]/d' /etc/grub2.cfg 方法一

sed 's/^[[:space:]]//g' /etc/grub2.cfg 方法二

2.删除/etc/fstab文件中所有以#开头

sed '/^#/d' /etc/fstab

3.将/etc/fstab中全部添加#号键,并以#号开头

sed 's/^/\#/g' /etc/fstab

4.删除/etc/passwd中的偶数行

sed '2~2d' /etc/passwd

5.从/etc/passwd中找出包含root的行,并把root改成rooter

sed 's/root/rooter/g' /etc/passwd

sed -n 's/root/rooter/gp' /etc/passwd

6.从/etc/passwd中找到以为bash结尾并在这些行后面加上一句话:you are very good!

sed '/bash$/a you are very good!' /etc/passwd

7.删除/etc/passwd中头三行信息

sed '1,3d' /etc/passwd

sed -n '4,$p' /etc/passwd

8.只打印/etc/passwd中第5到第10行信息

sed -n '5,10p' /etc/passwd

9.删除/etc/passwd中,包含'ftp‘的行到包好'ntp'的行

sed '/ftp/,/ntp/d' /etc/passwd

10.删除所有包含nologin的行

sed '/nologin/d' /etc/passwd

11.将所有的bin,改成sbin

sed 's/bin/sbin/g' /etc/passwd

12.用how are you 取代包含usr的行

sed -n '/usr/c how are you' /etc/passwd

13.把包含数字的换成*号代替

sed 's/[[:digit:]]/*/g' /etc/passwd

14.把包含sync的行,到包含sshd的行 全部用 Come on 代替!

sed '/sync/,/sshd/c Come on' /etc/passwd

15.把每个单词的第一个小写字母变大写。

sed 's/\<[a-z]/\u&/' /etc/passwd

16.匹配以字母a开头的行尾位加上一句话:To be NO.1

sed -r 's/(^a.*)/\1 To be NO.1/' /etc/passwd

17.找出包含nobody的行,打印出,并只打印匹配的内容

sed -n '/nobody/{p;=}' /etc/passwd

18.只打印从包含gnome到最后 的行

sed -n '/gnome/,$p' /etc/passwd

19.同时打印以mail开头的行和以rpm开头的行

sed -n -e '/^mail/p' -e '/^rpc/p'

20.从第5行开始到结束把:符号换成*符号

sed '5,$s/:/*/g' /etc/passwd

21.打印出前10行

sed '10q' /etc/passwd

22.从/etc/fstab文件中,打印出不包含##的行

sed -n '/#/!p' /etc/fstab

23.将第8行,到匹配到行首为gdm的行首第一次字母替换为*

sed '8,/gdm/s/^./*/g' /etc/passwd

24.在匹配以sshd开头的行后面添加两行内容,分别为:are you ok? yes, I'm fine

sed '/sshd/a are you ok?\nyes,I'\''m fine!' /etc/passwd
————————————————
版权声明:本文为CSDN博主「自然醒o./」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_53829140/article/details/121743002



推荐阅读
  • 分享2款网站程序源码/主题等后门检测工具
    本文介绍了2款用于检测网站程序源码和主题中是否存在后门的工具,分别是WebShellkiller和D盾_Web查杀。WebShellkiller是一款支持webshell和暗链扫描的工具,采用多重检测引擎和智能检测模型,能够更精准地检测出已知和未知的后门文件。D盾_Web查杀则使用自行研发的代码分析引擎,能够分析更为隐藏的WebShell后门行为。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 本文介绍了Linux Shell中括号和整数扩展的使用方法,包括命令组、命令替换、初始化数组以及算术表达式和逻辑判断的相关内容。括号中的命令将会在新开的子shell中顺序执行,括号中的变量不能被脚本余下的部分使用。命令替换可以用于将命令的标准输出作为另一个命令的输入。括号中的运算符和表达式符合C语言运算规则,可以用在整数扩展中进行算术计算和逻辑判断。 ... [详细]
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • vue使用
    关键词: ... [详细]
  • C语言注释工具及快捷键,删除C语言注释工具的实现思路
    本文介绍了C语言中注释的两种方式以及注释的作用,提供了删除C语言注释的工具实现思路,并分享了C语言中注释的快捷键操作方法。 ... [详细]
  • 本文介绍了在Linux下安装Perl的步骤,并提供了一个简单的Perl程序示例。同时,还展示了运行该程序的结果。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • 本文讨论了Kotlin中扩展函数的一些惯用用法以及其合理性。作者认为在某些情况下,定义扩展函数没有意义,但官方的编码约定支持这种方式。文章还介绍了在类之外定义扩展函数的具体用法,并讨论了避免使用扩展函数的边缘情况。作者提出了对于扩展函数的合理性的质疑,并给出了自己的反驳。最后,文章强调了在编写Kotlin代码时可以自由地使用扩展函数的重要性。 ... [详细]
  • 本文介绍了包的基础知识,包是一种模块,本质上是一个文件夹,与普通文件夹的区别在于包含一个init文件。包的作用是从文件夹级别组织代码,提高代码的维护性。当代码抽取到模块中后,如果模块较多,结构仍然混乱,可以使用包来组织代码。创建包的方法是右键新建Python包,使用方式与模块一样,使用import来导入包。init文件的使用是将文件夹变成一个模块的方法,通过执行init文件来导入包。一个包中通常包含多个模块。 ... [详细]
  • 深度学习中的Vision Transformer (ViT)详解
    本文详细介绍了深度学习中的Vision Transformer (ViT)方法。首先介绍了相关工作和ViT的基本原理,包括图像块嵌入、可学习的嵌入、位置嵌入和Transformer编码器等。接着讨论了ViT的张量维度变化、归纳偏置与混合架构、微调及更高分辨率等方面。最后给出了实验结果和相关代码的链接。本文的研究表明,对于CV任务,直接应用纯Transformer架构于图像块序列是可行的,无需依赖于卷积网络。 ... [详细]
author-avatar
笨蛋說愛我8_382
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有