Linux学习之sed替换命令讲解

cat /etc/redhat-release看到操作系统是CentOS Linux release 7.6.1810uname -r看到内核版本是3.10.0-957.el7.x86_64bash --version可以看到bash版本是4.2.46(2)
在这里插入图片描述

sed(sed strem editor)可以理解为行编辑器,但它并不直接编辑文本文件本身,其默认对原文件内容不做任何修改。sed在处理文件的时候,每次都会逐行把文件内容读取到内存中,然后使用特定的模式对读入的文件内容进行处理,这样的一段内存空间成为模式空间。
sed的两种处理方法:

把文本全部内容逐行读取到模式空间中,在模式空间中会有指定的模式,然后把读取到的行和模式空间中的模式做匹配.
读取文本时把符合模式条件的内容逐行读取到模式空间中,符合模式过滤条件的,则在模式空间中做相对应的编辑处理,把模式空间中的内容显示输出,不符合的则不做处理并直接按原样输出。

sed格式有两种,如下:

sed [OPTIONS]… ‘COMMAND’ [FILE]…
sed [OPTIONS] -f SCRIPTFILE [FILE]…

sed的替换命令是s,普通格式如下:

sed 's/oldstring/newstring/' filename,这个会把模式空间中匹配的第一个oldstring改成newstring,但是这个不会在原文件filename中操作。

sed -e 's/oldstring1/newstring1/' -e 's/oldstring2/newstring2/' filename,这个会把模式空间中匹配的第一个oldstring1改成newstring1,然后修改过之后的字符串上,把第一次匹配的oldstring2改成newstring2,同样的,这个不会在原文件filename中操作。

sed -i 's/oldstring1/newstring1/' filename,这个会把模式空间中匹配的第一个oldstring1改成newstring1,修改过之后的内容会输出到原文件filename中。

可以使用正则表达式的格式如下:

`sed ‘s/正则表达式/newstring/’ filename

`sed -r ‘s/拓展正则表达式/newstring/’ filename

sed ‘s/oldstring/newstring/’ filename

echo a:aa:aaa >> sedtest.txt
echo a:bb:aa >> sedtest.txt
echo cc : cc : ccc >> sedtest.txt

上边三条命令把下边的内容写到sedtest.txt:

a:aa:aaa
a:bb:aa
cc : cc : ccc

在这里插入图片描述

sed 's/a/aa/' sedtest.txt,可以看到每一个的第一个a被替换成了aa,再使用cat sedtest.txt可以看到sedtest.txt里边的内容没有任何改变。
在这里插入图片描述

echo 'go/d' >> sedtest.txtgo/d写入到sedtest.txt中,cat sedtest.txt可以看到sedtest.txt中的内容如下:

a:aa:aaa
a:bb:aa
cc : cc : ccc
go/d

若是想要把/改成o,而要使用sed 's///o/' sedtest.txt会报错

sed: -e expression #1, char 5: unknown option to \`s'

在这里插入图片描述

有两种方法,第一种使用转义字符sed 's/\//o/' sedtest.txtcat sedtest.txt可以看到sedtest.txt中的内容没有发生改变。
在这里插入图片描述

第二种是更改定界符,可以把定界符改为!sed 's!/!o!' sedtest.txtcat sedtest.txt可以看到sedtest.txt中的内容没有发生改变。
在这里插入图片描述

定界符也可以改为#@这些字符,sed 's#/#o#' sedtest.txtsed 's@/@o@' sedtest.txt
在这里插入图片描述

sed -e选项

echo '::' >> sedtest.txt::写入到sedtest.txt中,cat sedtest.txt可以看到内容如下:

a:aa:aaa
a:bb:aa
cc : cc : ccc
go/d
::

在这里插入图片描述

sed -e 's/aa/z:/' -e 's/::/oo:/' sedtest.txt | cat -n先把aa换成z:,然后在上一步已经替换的基础上再次把::替换成oo:,可以看到第1行中的aa已经被替换成了zoo,第2行中的aa只是被替换成z:,第5行中::改成了oo:|是管道符,就是把前边的输出当成后边命令的输入标志,cat -n把内容带上行号输出。cat sedtest.txt可以看到sedtest.txt中的内容没有发生改变。
在这里插入图片描述

sed 's/aa/z:/;s/::/oo:/' sedtest.txt | cat -n,把两个-e选项去掉,然后把命令之间使用;隔开也可以实现上边的效果。cat -n sedtest.txt可以看到sedtest.txt中的内容没有发生改变。
在这里插入图片描述

sed -i选项

sed -i 's/oldstring1/newstring1/' filename,这个会把模式空间中匹配的第一个oldstring1改成newstring1,然后把修改结果写到文件filename中。
cat -n sedtest.txt可以看到如下内容:

     1  a:aa:aaa2  a:bb:aa3  cc : cc : ccc4  go/d5  ::

前边的12345是行号,不是sedtest.txt里边的内容。
sed -i 's/\//o/' sedtest.txt会把/改成o,然后把更改过之后内容写入到sedtest.txtcat -n sedtest.txt可以看到更改之后的如下内容:

     1  a:aa:aaa2  a:bb:aa3  cc : cc : ccc4  good5  ::

发现文件中的/改成了o
在这里插入图片描述

sed正则支持

.匹配除换行符之外的任意一个字符,只能匹配一个字符。

sed 's/.:/love:/' sedtest.txt将第一组任意字符+:的字符串替换成love:cat -n sedtest.txt可以看到sedtest.txt中的内容没有发生改变。
在这里插入图片描述

*匹配它之前一个字符或者一个正则表达式0至若干次。

sed 's/c* /c/' sedtest.txt | cat -n,可以看到cc 被替换成了ccat -n sedtest.txt可以看到sedtest.txt中的内容没有发生改变。
在这里插入图片描述

^匹配一行的开始

echo ca:r >> sedtest.txtca:r写到文件sedtest.txt最后一行,cat -n sedtest.txt可以看到更改之后的如下内容:

     1  a:aa:aaa2  a:bb:aa3  cc : cc : ccc4  good5  ::6  ca:r

在这里插入图片描述

sed 's/a:/d:/' sedtest.txt | cat -n会把第六行中的a:改为d:,而sed 's/^a:/d:/' sedtest.txt | cat -n没有更改第六行中的a:
在这里插入图片描述

sed -r 拓展元字符

+匹配它前边字符一次或多次

echo 'a' >> sedfiletest.txt
echo 'aa' >> sedfiletest.txt
echo 'aaa' >> sedfiletest.txt
echo 'ab' >> sedfiletest.txt
echo 'aab' >> sedfiletest.txt
echo 'aaabbb' >> sedfiletest.txt

把下边的内容:

a
aa
aaa
ab
aab
aaabbb

写入到sedfiletest.txt里边。cat sedfiletest.txt看一下sedfiletest.txt里边内容。
在这里插入图片描述
sed -r 's/a+b/:/' sedfiletest.txt可以匹配abaabaaabaaa......b
在这里插入图片描述

echo 'b' >> sedfiletest.txt,把b写入到sedfiletest.txt里边。cat sedfiletest.txt看一下sedfiletest.txt里边内容。
在这里插入图片描述

sed -r 's/a?b/:/' sedfiletest.txt?只能匹配它前边的字符0次或者1次,不会匹配其他次数。
在这里插入图片描述

sed -r 's/a|b/:/' sedfiletest.txt | cat -n|相当于的意思,就是a或者b的意思,cat -n sedfiletest.txt发现文件里边的内容没有改变。
在这里插入图片描述

sed -r 's/(aa)|(b)/:/' sedfiletest.txt | cat -n()相当于组合的意思,就是aa或者b的意思,cat -n sedfiletest.txt发现文件里边的内容没有改变。
在这里插入图片描述
()还可以用于回调,就是可以当成一个变量暂时使用。sed -r 's/(aa)|(b)/\1:\2/g' sedfiletest.txt | cat -n这里的\1相当于aa\2相当于b
在这里插入图片描述

find / -name passwd

此文章为8月Day 7学习笔记,内容来源于极客时间《Linux 实战技能 100 讲》。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/57342.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

TM4C123库函数学习(1)--- 点亮LED+TM4C123的ROM函数简介+keil开发环境搭建

前言 (1) 首先,我们需要知道TM4C123是M4的内核。对于绝大多数人而言,入门都是学习STM32F103,这款芯片是采用的M3的内核。所以想必各位对M3内核还是有一定的了解。M4内核就是M3内核的升级版本,他继承了M3的的…

了解Swarm 集群管理

Swarm 集群管理 简介 Docker Swarm 是 Docker 的集群管理工具。它将 Docker 主机池转变为单个虚拟 Docker 主机。 Docker Swarm 提供了标准的 Docker API,所有任何已经与 Docker 守护程序通信的工具都可以使用 Swarm 轻松地扩展到多个主机。 支持的工具包括但不限…

django处理分页

当数据库量比较大的时候一定要分页查询的 在django中操作数据库进行分页 queryset models.PrettyNum.objects.all() #查询所有 queryset models.PrettyNum.objects.all()[0:10] #查询出1-10列 queryset models.PrettyNum.objects.filter(mobile__contains136)[0:10] …

认识Vue;vue使用和安装;声明式和命令式编程;MVVM模型;data属性;methods属性

目录 1_认识Vue2_vue使用和安装3_声明式和命令式编程4_MVVM模型5_data属性6_methods属性 1_认识Vue Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式 JavaScript框架。 全称是Vue.js或者Vuejs; 它基于标准 HTML、CSS 和 JavaScript 构建…

Mybatis异常Invalid bound statement (not found)原因之Mapper文件配置不匹配

模拟登录操作 $.post("/admin/login", {aname, pwd }, rt > {if (rt.code 200) {location.href "manager/index.html";return;}alert(rt.msg)});网页提示服务器代码错误 POST http://localhost:8888/admin/login 500后端显示无法找到Mapper中对应的…

Windows系统下添加了新环境变量无需重启电脑激活新环境变量的方法

首先WinR,再输入cmd,进入终端,输入以下命令: set Pathc输入完以上命令回车,如下: 关闭终端后再次打开输入cl,如果输出以下类似信息说明新的环境变量已经添加成功,如下: …

机器学习基础08-回归算法矩阵分析(基于波士顿房价(Boston House Price)数据集)

回归算法通常涉及到使用矩阵来表示数据和模型参数。线性回归是最常见的回归算法之一,它可以用矩阵形式来表示。 考虑一个简单的线性回归模型: y m x b y mx b ymxb,其中 y y y 是因变量, x x x 是自变量, m m m 是…

Linux 远程登录

Linux 远程登录 Linux 一般作为服务器使用,而服务器一般放在机房,你不可能在机房操作你的 Linux 服务器。 这时我们就需要远程登录到Linux服务器来管理维护系统。 Linux 系统中是通过 ssh 服务实现的远程登录功能,默认 ssh 服务端口号为 2…

相关性分析和回归分析

一 相关性分析 相关性分析一般是用来简单的分析数据之间的相关性关系,用来研究的是连续性的数值变量或者量表的数据,只能分析出来每两个变量之间的相关性关系。一般是用于在回归分析之前,用于对于数据进行一个简单的相关性探讨,回…

Spring系列三:基于注解配置bean

文章目录 💗通过注解配置bean🍝基本介绍🍝快速入门🍝注意事项和细节 💗自己实现Spring注解配置Bean机制🍝需求说明🍝思路分析🍝注意事项和细节 💗自动装配 Autowired&…

分布式 - 服务器Nginx:一小时入门系列之HTTP反向代理

文章目录 1. 正向代理和反向代理2. 配置代理服务3. proxy_pass 命令解析4. 设置代理请求headers 1. 正向代理和反向代理 正向代理是客户端通过代理服务器访问互联网资源的方式。在这种情况下,客户端向代理服务器发送请求,代理服务器再向互联网上的服务器…

C++初阶语法——引用,从此和指针说byebye

前言:相信学过C语言的同学肯定被指针深深折磨过,从一级指针到二级指针,数组指针,函数指针等等,可谓是谈针色变。而在C中,使用引用代替了指针的使用,大大降低了我们学习的难度。 引用 一.什么是…