百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 优雅编程 > 正文

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

sinye56 2025-02-18 13:16 6 浏览 0 评论

作用

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

语法

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

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

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

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

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

以下为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行内容 .
  1. 删除文件中3~13行
  1. 删除匹配boot的行
  1. 删除以d开头的行

5.删除包含d字符的行

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

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

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

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

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

先准备数据文件,通过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. 过滤掉注释的行,备注:注释的行是以#开头
  1. 过滤掉所有的空行
  1. 过滤掉所有注释行和空行,此命令用到{},不清楚的可参考上面的命令
  1. 删除掉所有注释行和空行,(这里的删除并非对源文件内容进行删除)
  1. 匹配任何包含JVM的行
  1. 匹配包含JNI_LIBDIR或者JVM_ROOT的行
  1. 匹配任何包含数字的行

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

  1. 将含有aaa字符的第一个字符a 替换成b.
  1. 将含有aaa的字符替换成bbb.
  1. 将JAVA_HOME替换成JAVA_DIR,注意,此文件包含多行JAVA_HOME
  1. 替换第二行内容中的root为test,注意是第一个匹配到的root字符。
  1. 替换第二,三行中的root为test,这次为全局替换
  1. 替换第二行到最后一行的root为test(全局替换)
  1. 在匹配See字符的行,行首添加hello
  1. 在匹配See字符的行,在See字符后添加hello
  1. 在匹配See字符的行,在See字符前添加hello
  1. 在匹配See字符的行,在行尾添加hello
  1. 在每一行的开头添加hello 。
  1. 在每一行的结尾添加hello 。

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

  1. 在匹配ddd字符的行的前面一行添加hello
  1. 在匹配ddd字符的行的后面一行添加hello
  1. 在匹配的ddd行的下一行添加多行内容。
  1. 将一个新行添加到文件的第三行。
  1. 查询boot的行是在第几行

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

  1. 将文件info中的ccc修改为xyz。
  1. 将文件info中匹配到tmp的行,其中包含root的字符修改为test .
  1. 在匹配kkk的行的结尾添加end字符 。
  1. 直接替换文件中第三行的内容。

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

  1. 将文件aa.txt中的前两行输出到文本文件abc.txt。
  1. 将aa.txt中匹配boot的行写入到a1.txt中
  1. 读取文件a.sh中的指令进行替换xxx为hello world .

相关推荐

6个接私活的网站,你有技术就有钱

如果觉得有帮助,还请大家帮忙多多转发,点个关注作者:发哥链接:GitHubDaily本篇文章会向大家推荐国内外几个接外包比较靠谱的平台,主旨是贵精不贵多。因此,像「猪x戒」这种会让程序员自贬身价,扰乱...

Java开源可商用的CMS建站系统_java建站源码

Java研发的CMS内容管理系统具有许多优势和特点,包括以下几个方面:跨平台性:Java是一种跨平台的编程语言,可以在不同的操作系统上运行,包括Windows、Linux、Mac等。这意味着Java...

SEO新手建站必看"干货"优质空间和功能选择技巧!

一.空间的分类服务器:远程的高级大型计算机。vps:虚拟服务器。虚拟空间:也称虚拟主机云主机:是在一组集群主机上虚拟出多个类似独立主机的部分,集群中每个主机上都有云主机的一个镜像,从而大大提高了虚拟主...

千字长文教你使用 宝塔面板 快速搭建网站

本文将教大家使用宝塔面板快速搭建网站,云服务器购买以及域名注册部分请自行上网搜索了解,亦可留言联系小编进行咨询。如果是和下方一样本地搭建演示的话,则不需要付费购买域名和主机。宝塔面板的是...

BlueHost香港虚拟主机建站的5个优点

应该是从2006年左右开始,如果我们建站选择国内的主机需要备案手续,而且比较繁琐,且根据各地的不同政策还需要到接入点拍照登记个人信息等,一来比较繁琐,二来我们担心万一网站可能存在的信息问题导致不必要的...

10款好用的Linux服务器网站管理面板推荐

如今在建站时,很多人都会使用管理面板来辅助建站,因为相对于手动安装软件,面板更加简单而且高效,即使新手也能很快学会搭建网站,在本文中我们来推荐几款好用的网站管理面板宝塔面板宝塔面板是一款简单好用的网站...

小白拥有一台云服务器到底能干些什么?成就感爆棚的简单方案!

?云服务器是什么?云服务器(比如阿里云、腾讯云等)是提供给用户的一种虚拟服务器资源,你可以把它看作一台“rent的电脑”,只需要支付少量费用就可以拥有一个功能强大的网络设备。对于小白来说,拥有一...

苹果CMS,苹果CMS采集插件,苹果CMS快速建站(图文教程)

苹果CMS,有着强大的管理功能,管理后台界面大方、操作简单、功能齐全、模块众多、双端管理。苹果CMS加上丰富的系统标签,系统内置了丰富的cms标签并支持thinkphp框架标签完美融合,可以调取系统内...

新手搭建网站、小程序、APP等系统,如何选择服务器?

今天和小蔡和大家说说,新手搭建网站,如何选择服务器?废话不多说,直接来干货。服务器是存放网站源代码的容器,也是运行网站程序的工具,所以是不可或缺的。新手刚接触搭建网站,若不知道怎么去选择一台适合自己...

在海外VPS服务器(Hostinger)上配置宝塔面板的操作步骤

不得不说,宝塔面板是真的好用啊~用上就放不下了,一些海外的免费开源的服务器集成面板(比如CloudPanel)我也用了,不喜欢,真的不如宝塔面板方便耐用。今天聊一下在海外服务器(也包括国内服务器,没有...

干货盘点:每个wordpress站长都推荐完成的60个任务清单

构建和运营wordpress网站包含了很多重要任务,遗漏哪一方面都可能造成或大或小的不良后果,因此我们特别整理了这个任务清单,为你查漏补缺,希望能对您现在运营或者即将开始构建的wordpress网站有...

为什么站长喜欢选择BlueHost主机建站

BlueHost正式成立于2003年,从事主机(虚拟主机)业务至今已经将近十余年,无论从口碑还是用户的评价,我们基本很少看到关于Bluehost主机产品和商家负面的评论信息。从2014年开始,Blue...

自助建站时代来临 半小时成建站达人

“H5”意为第五代HTML,即第五代网页编写语言。自从1991年第一代HTML开始研发以来,网页编写、网站建设一直都属于高端技术行业,网站建设人员都是一些专业型人才,这也意味着网站的建设和维护都需要不...

现代化、开源的 Linux 服务器运维管理面板

1Panel是一个现代化、开源的Linux服务器运维管理面板。1Panel的功能和优势包括:快速建站:深度集成Wordpress和Halo,域名绑定、SSL证书配置等一键搞定;高效管理...

[1Panel]开源,现代化,新一代的 Linux 服务器运维管理面板

测评介绍本期测评试用一下1Panel这款面板。1Panel是国内飞致云旗下开源产品。整个界面简洁清爽,后端使用GO开发,前端使用VUE的Element-Plus作为UI框架,整个面板的管理都是基于do...

取消回复欢迎 发表评论: