您当前的位置:首页 > 电脑百科 > 软件技术 > 操作系统 > linux

Linux文本处理三剑客之sed命令全面解析,一文就够了

时间:2020-10-27 11:28:46  来源:  作者:

作用

  • sed命令是一个非交互式的行文本编辑器,它能对文件内容进行编辑,默认每次处理文本文件中所匹配到一行内容到模式空间,然后用后面的命令进行操作,操作完成之后,会把模式空间里面的内容输出到屏幕上,然后把模式空间中的内容删除,同时把下一行所匹配到的内容读入模式空间内,依次循环,直到读取完整个文件。
  • sed 命令处理的是缓冲区中的内容,其实这里的缓冲区,就是模式空间

语法

sed语法支持两种格式,分别是

  • sed [options] 'address command' file
  • sed [options] -f [scripefile] file

对以上的几个英语字符进行说明:

  • options为选项,其中sed支持的选项会在下面的选项小结说明
  • address : 相当于匹配的条件,会在地址中进行说明
  • command为命令,相当于一个参数,放在地址后面,具体见下面的命令小节说明
  • file :为文本文件

需要说明的是,使用时address和command会挨在一起,中间没有空格,上面语法中间加空格是为了说明这是两个部分

以下为sed命令的工作流程图

<a href=https://www.isolves.com/it/rj/czxt/linux/ target=_blank class=infotextkey>linux</a>文本处理三剑客之sed命令全面解析,一文就够了

 

选项

这里的选项就是指sed之后的options,常见的选项具体如下:

-e ,--expression=script 
以选项中指定的script参数来处理文本文件,可以指定多个命令

-f file,--files=script
以文件中的指定的参数来处理文本文件
​
-n ,--quiet ,--slient
取消默认输出,sed默认会输出所有文本内容,使用-n参数后只显示处理过的行
​
-r ,--regexp-extended
支持扩展正则表达式
​
-i,--in-place[=SUFFIX]
直接修改文件内容

地址

这里的地址就是语法格式中的address部分,是在单引号里的前一部分 。

替换标记说明linenumber指定特定行号startline,endline指定起始行号和结束行号linenumber,+nn为数字,表示从指定行号向后n行/pattern/已正则表达式表示的匹配模式/pattern1, /pattern2/从模式匹配1到模式匹配2pattern/,x在给定行号上查询包含模式的行x,/pattern/通过行号和模式查询匹配的行x,y!查询不包含指定行号x和y的行

命令

这里的指令就是command,这个一般放在单引号内,同时和要处理的字符放在一起,只是command放在字符的前面。

a 追加,向匹配行后面插入内容 
i 插入,向匹配行前插入内容
c 更改,更改匹配行的内容
d 删除,删除匹配行的内容
s 使用替换模式替换相应模式
s/patten/newstring 替换,把patten匹配到的内容换成newstring
p 打印,打印出匹配的内容,通过与-n选项配合使用
= 标号,用来将匹配的行前标号
n 读取下一行,遇到n会自动自动跳入下一行
r 将内容读入文件
{} 命令间的传递,类似于管道符|
w 将匹配内容写入文件
W 将匹配到行的第一行,保存到file中。

替换标记

  • g : 表示将匹配到的内容进行全局替换 。
  • 1 :表示前面第一个左括号所表示的内容 ,2表示前面第二个左括号中表示的内容,依次类推
  • & : 表示前面匹配到的内容

正则匹配

正在匹配在上面已经介绍到,详情请见正则表达式介绍。具体见:35个参数13个案例,全面解析Linux三剑客之grep命令

实例

以下主要针对地址指令的实战练习

先准备数据文件aa.txt,通过cat查看aa.txt文件内容

[root@localhost test]# cat aa.txt 
总用量 28
lrwxrwxrwx.   1 root root     7 9月  10 06:12 bin -> usr/bin
dr-xr-xr-x.   6 root root  4096 9月  10 06:44 boot
drwxr-xr-x.  20 root root  3360 9月  29 05:19 dev
drwxr-xr-x.   3 root root    20 9月  14 03:08 Docker_registry
drwxr-xr-x.   2 root root    41 9月  17 06:23 docker_study
drwxr-xr-x. 151 root root 12288 9月  29 05:20 etc
drwxr-xr-x.   3 root root    18 9月  10 06:57 home
lrwxrwxrwx.   1 root root     7 9月  10 06:12 lib -> usr/lib
lrwxrwxrwx.   1 root root     9 9月  10 06:12 lib64 -> usr/lib64
drwxr-xr-x.   2 root root     6 4月  11 2018 media
drwxr-xr-x.   2 root root    21 9月  19 21:51 mnt
drwxr-xr-x.   4 root root    34 9月  11 06:53 opt
dr-xr-xr-x. 307 root root     0 9月  29 05:19 proc
dr-xr-x---.   7 root root   266 9月  29 05:20 root
drwxr-xr-x.  45 root root  1320 9月  29 06:26 run
lrwxrwxrwx.   1 root root     8 9月  10 06:12 sbin -> usr/sbin
drwxr-xr-x.   2 root root     6 4月  11 2018 srv
dr-xr-xr-x.  13 root root     0 9月  29 05:19 sys
drwxr-xr-x.   3 root root    43 9月  26 19:11 test
drwxrwxrwt.  24 root root  4096 9月  29 06:38 tmp
drwxr-xr-x.  13 root root   155 9月  10 06:12 usr
drwxr-xr-x.  22 root root  4096 9月  10 06:45 var
  1. 显示文件中的第2行内容 .
Linux文本处理三剑客之sed命令全面解析,一文就够了

显示文件中的第2行内容 .

  1. 删除文件中3~13行
Linux文本处理三剑客之sed命令全面解析,一文就够了

 

  1. 删除匹配boot的行
Linux文本处理三剑客之sed命令全面解析,一文就够了

 

  1. 删除以d开头的行
Linux文本处理三剑客之sed命令全面解析,一文就够了

 

5.删除包含d字符的行

Linux文本处理三剑客之sed命令全面解析,一文就够了

 

6.打印匹配以d开头到以l开头的行(多次匹配)

Linux文本处理三剑客之sed命令全面解析,一文就够了

 

7.打印dev到第5行,其中不包含第5行

Linux文本处理三剑客之sed命令全面解析,一文就够了

 

8.打印第2行到匹配到dev之间的行

Linux文本处理三剑客之sed命令全面解析,一文就够了

 

9.除3~16行之间的数据,将其它数据输出

Linux文本处理三剑客之sed命令全面解析,一文就够了

 

以下主要正则正则匹配的实战练习

先准备数据文件,通过cat命令查看JAVA.conf文件

[root@localhost test]# 
[root@localhost test]# cat java.conf 
# System-wide Java configuration file  -*- sh -*-

# Location of jar files on the system
JAVA_LIBDIR=/usr/share/java

# Location of arch-specific jar files on the system
JNI_LIBDIR=/usr/lib/java

# Root of all JVM installations
JVM_ROOT=/usr/lib/jvm

# You can define a system-wide JVM root here if you're not using the
# default one.
#
# If you have a base JRE package installed
# (e.g. java-1.6.0-openjdk):
#JAVA_HOME=$JVM_ROOT/jre
#
# If you have a devel JDK package installed
# (e.g. java-1.6.0-openjdk-devel):
#JAVA_HOME=$JVM_ROOT/java

# Options to pass to the java interpreter
#JAVACMD_OPTS=

# You can disable ABRT Java Connector by setting JAVA_ABRT to "off".
# See: https://github.com/jfilak/abrt-java-connector/
#JAVA_ABRT=off
[root@localhost test]# 
  1. 过滤掉注释的行,备注:注释的行是以#开头
Linux文本处理三剑客之sed命令全面解析,一文就够了

 

  1. 过滤掉所有的空行
Linux文本处理三剑客之sed命令全面解析,一文就够了

 

  1. 过滤掉所有注释行和空行,此命令用到{},不清楚的可参考上面的命令
Linux文本处理三剑客之sed命令全面解析,一文就够了

 

  1. 删除掉所有注释行和空行,(这里的删除并非对源文件内容进行删除)
Linux文本处理三剑客之sed命令全面解析,一文就够了

 

  1. 匹配任何包含JVM的行
Linux文本处理三剑客之sed命令全面解析,一文就够了

 

  1. 匹配包含JNI_LIBDIR或者JVM_ROOT的行
Linux文本处理三剑客之sed命令全面解析,一文就够了

 

  1. 匹配任何包含数字的行
Linux文本处理三剑客之sed命令全面解析,一文就够了

 

以下主要针对各命令的练习,如s,i,a,r,w,p等

  1. 将含有aaa字符的第一个字符a 替换成b.
Linux文本处理三剑客之sed命令全面解析,一文就够了

 

  1. 将含有aaa的字符替换成bbb.
Linux文本处理三剑客之sed命令全面解析,一文就够了

 

  1. 将JAVA_HOME替换成JAVA_DIR,注意,此文件包含多行JAVA_HOME
Linux文本处理三剑客之sed命令全面解析,一文就够了

 

  1. 替换第二行内容中的root为test,注意是第一个匹配到的root字符。
Linux文本处理三剑客之sed命令全面解析,一文就够了

 

  1. 替换第二,三行中的root为test,这次为全局替换
Linux文本处理三剑客之sed命令全面解析,一文就够了

 

  1. 替换第二行到最后一行的root为test(全局替换)
Linux文本处理三剑客之sed命令全面解析,一文就够了

 

  1. 在匹配See字符的行,行首添加hello
Linux文本处理三剑客之sed命令全面解析,一文就够了

 

  1. 在匹配See字符的行,在See字符后添加hello
Linux文本处理三剑客之sed命令全面解析,一文就够了

 

  1. 在匹配See字符的行,在See字符前添加hello
Linux文本处理三剑客之sed命令全面解析,一文就够了

 

  1. 在匹配See字符的行,在行尾添加hello
Linux文本处理三剑客之sed命令全面解析,一文就够了

 

  1. 在每一行的开头添加hello 。
Linux文本处理三剑客之sed命令全面解析,一文就够了

 

  1. 在每一行的结尾添加hello 。
Linux文本处理三剑客之sed命令全面解析,一文就够了

 

13.在前三行的行首添加hello 。

Linux文本处理三剑客之sed命令全面解析,一文就够了

 

  1. 在匹配ddd字符的行的前面一行添加hello
Linux文本处理三剑客之sed命令全面解析,一文就够了

 

  1. 在匹配ddd字符的行的后面一行添加hello
Linux文本处理三剑客之sed命令全面解析,一文就够了

 

  1. 在匹配的ddd行的下一行添加多行内容。
Linux文本处理三剑客之sed命令全面解析,一文就够了

 

  1. 将一个新行添加到文件的第三行。
Linux文本处理三剑客之sed命令全面解析,一文就够了

 

  1. 查询boot的行是在第几行
Linux文本处理三剑客之sed命令全面解析,一文就够了

 

以上所有的替换或变化都不会改变原文件的内容 。

  1. 将文件info中的ccc修改为xyz。
Linux文本处理三剑客之sed命令全面解析,一文就够了

 

  1. 将文件info中匹配到tmp的行,其中包含root的字符修改为test .
Linux文本处理三剑客之sed命令全面解析,一文就够了

 

  1. 在匹配kkk的行的结尾添加end字符 。
Linux文本处理三剑客之sed命令全面解析,一文就够了

 

  1. 直接替换文件中第三行的内容。
Linux文本处理三剑客之sed命令全面解析,一文就够了

 

23.将指定文件abc.txt中的内容插入到info文件的第三行

Linux文本处理三剑客之sed命令全面解析,一文就够了

 

  1. 将文件aa.txt中的前两行输出到文本文件abc.txt。
Linux文本处理三剑客之sed命令全面解析,一文就够了

 

  1. 将aa.txt中匹配boot的行写入到a1.txt中
Linux文本处理三剑客之sed命令全面解析,一文就够了

 

  1. 读取文件a.sh中的指令进行替换xxx为hello world .
Linux文本处理三剑客之sed命令全面解析,一文就够了

 



Tags:Linux文本   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
作用 sed命令是一个非交互式的行文本编辑器,它能对文件内容进行编辑,默认每次处理文本文件中所匹配到一行内容到模式空间,然后用后面的命令进行操作,操作完成之后,会把模式空间里...【详细内容】
2020-10-27  Tags: Linux文本  点击:(154)  评论:(0)  加入收藏
作者:大CC原文:http://www.cnblogs.com/me115/p/3427319.html 本文将介绍Linux下使用Shell处理文本时最常用的工具:find、grep、xargs、sort、uniq、tr、cut、paste、wc、sed...【详细内容】
2019-07-18  Tags: Linux文本  点击:(203)  评论:(0)  加入收藏
▌简易百科推荐
作用显示文件或目录所占用的磁盘空间使用命令格式du [option] 文件/目录命令功能显示文件或目录所占用的磁盘空间一些写法的区别du -sh xxx 显示总目录的大小,但是不会列出...【详细内容】
2021-12-23  mitsuhide1992    Tags:du命令   点击:(12)  评论:(0)  加入收藏
什么是linux内核linux就像是一个哲学的最佳实践。如果非要对它评价,我真的不知道该怎么赞叹,我只能自豪地说着:“linux的美丽简直让人沉醉。”我只能说是我处在linux学习的修炼...【详细内容】
2021-12-23  linux上的码农    Tags:linux内核   点击:(15)  评论:(0)  加入收藏
本文将比较 Linux 中 service 和 systemctl 命令,先分别简单介绍这两个命令的基础用法,然后进行比较。从 CentOS 7.x 开始,CentOS 开始使用 systemd 服务来代替 service服务(dae...【详细内容】
2021-12-23  软件架构    Tags:systemctl   点击:(13)  评论:(0)  加入收藏
mv是move的缩写,可以用来移动文件或者重命名文件名,经常用来备份文件或者目录。命令格式mv [选项] 源文件或者目录 目标文件或者目录命令功能mv命令中第二个参数类型的不同(...【详细内容】
2021-12-17  入门小站    Tags:mv命令   点击:(23)  评论:(0)  加入收藏
大数据技术AI Flink/Spark/Hadoop/数仓,数据分析、面试,源码解读等干货学习资料 98篇原创内容 -->公众号 Linux sed 命令是利用脚本来处理文本文件。sed 可依照脚本的指令来处...【详细内容】
2021-12-17  仙风道骨的宝石骑士    Tags:sed命令   点击:(21)  评论:(0)  加入收藏
Node是个啥?  写个东西还是尽量面面俱到吧,所以有关基本概念的东西我也从网上选择性地拿了下来,有些地方针对自己的理解有所改动,对这些概念性的东西有过了解的可选择跳过这段...【详细内容】
2021-12-15  linux上的码农    Tags:node   点击:(21)  评论:(0)  加入收藏
难道只有我一个人觉得Ubuntu的unity桌面非常好用吗?最近把台式机上面的Ubuntu 16.04格式化了,装了黑苹果用了一周,不得不说,MacOS确实很精美,软件生态比Linux丰富很多,比Windows简...【详细内容】
2021-12-14  地球末日村    Tags:ubuntu   点击:(34)  评论:(0)  加入收藏
简介Netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Memberships) 等等。输出信息含义执行net...【详细内容】
2021-12-13  窥镜天    Tags:Linux netstat   点击:(26)  评论:(0)  加入收藏
对于较多数量的文件描述符的监听无论是select还是poll系统调用都显得捉襟见肘,poll每次都需要将所有的文件描述符复制到内核,内核本身不会对这些文件描述符加以保存,这样的设计...【详细内容】
2021-12-13  深度Linux    Tags:Linux   点击:(16)  评论:(0)  加入收藏
今天,我们来了解下 Linux 系统的革命性通用执行引擎-eBPF,之所以聊着玩意,因为它确实牛逼,作为一项底层技术,在现在的云原生生态领域中起着举足轻重的作用。截至目前,业界使用范...【详细内容】
2021-12-10  架构驿站    Tags:eBPF   点击:(24)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条