sed的介绍及应用

sed 文本三剑客之一

sed是一种流编辑器,一次处理一行内行。

如果只是展示,会放在缓冲区(模式空间),展示结束之后,会从模式空间把操作结果删除。

工作模式一行一行处理,处理完当前行,才会处理下一行,直到文件末尾。(全局扫描)

sed的命令格式及操作选项:

sed -e ‘操作符’ -e ‘操作符’ 文件1 文件2

-e 表示可以跟多个操作符,只有一个操作,-e可以省略。

sed -e ‘操作符1;操作符2’ 文件1 文件2、

选项:

-e :用于执行多个操作命令

-f :在脚本中定义好了操作符,然后根据脚本内容的操作符对文件进行操作。

-i :直接修改目标文件(慎用)

-n :仅显示script处理后的结果(不加-n sed有两个输出结果,加了-n 之后就会把默认输出屏蔽,只显示一个结果)

操作符:

p: 打印结果

打印功能:

寻址打印:按照指定的行来进行打印

sed -n ‘=’ test.txt
sed -n '=;p' test1.txt
sed -n '4p' test1.txt

打印最后一行

sed -n '$p' test1.txt

行号范围打印

第二行到四行
sed -n '2,4p' test1.txt
第二行和第四行
sed -n '2p;4p' test1.txt

打印奇数行和偶数行

打印奇数行
sed -n 'p;n' test1.txt
打印偶数行
sed -n 'n;p' test1.txt
n的作用,跳过一行,打印下一行

如何对文本内容进行过滤

sed -n '/o/p' test1.txt
过滤并打印包含o的行,/ / 里面包含过滤的内容

使用正则表达式对文本内容进行过滤

sed -n '/^root/p' /etc/passwd

从指定行开始,打印到第一个以bash为结尾的行

sed -n '42,/bash$/p' /etc/passwd

r:使用扩展正则表达式

sed -rn '/(^root)|(bash$)/p' /etc/passwd
面试题:如何免交互删除文本内容,但是不删除文件
两种方法:
cat /dev/null > 文件名
sed -i 'd' test1.txt
删除文件内容,不删除文件
sed -i ‘d’ + 文件名

d:删除行

删除操作:

sed -n '3d' test1.txt
删除第三行,打印剩余的行
sed -n '5,$d;p' test1.txt
删除第五行到末尾行,打印剩余的行
sed -n '1!d;p' test1.txt
删除除了第一行所有的行
sed -n '4,6!d;p' test1.txt
删除除了第四行到第六行所有的行
! 取反的意思

匹配字符串删除行

sed '/s/d' test1.txt
/ /  匹配字符的内容
面试题 :如何删除空行
grep -v "^$" test1.txt
​
cat test1.txt | tr -s "\ n"
​
sed  '/^$/d' test1.txt

s:替换字符串

sed -n 's/ / /p'
替换字符串的格式
sed -n 's/root/test/p' /etc/passwd
只替换一个
sed -n 's/root/test/2p' /etc/passwd
替换指定位置
sed -n 's/root/test/gp' /etc/passwd
替换所有的
sed 's/[a-z]/\u&/' test1.txt
\u& 转换首字母大写的特殊符号,\转义符
首字母变成大写
sed 's/[a-z]/\u&/g' test1.txt
转换所有的字母变成大写的在后面加g
sed 's/[A-Z]/\l&/' test1.txt
\l&转换首字母小写的特殊符号
sed 's/[A-Z]/\l&/g' test1.txt
转换所有的字母变成小写的在后面加g,同上

c:替换行

整行替换:

sed '/要替换的内容/c 替换的内容'
sed '/1GGG/c nihao' test1.txt
c的位置与s的位置不一样,一个在前一个在后

y:替换单个字符。多个字符替换必须和替换内容的字符长度保持一致

sed -e 'y/one/111/' test1.txt
字符串的长度要相同,不然会报错

a:增加,在指定行的下面一行插入内容

sed '/3333/a bbbb' test1.txt

i:增加,在指定行的上面一行插入内容

sed '/3333/i bbbb' test1.txt

r: 在行后增加文本内容

sed '/3333/r  bbbb' test1.txt

$a : 在最后一行插入内容

sed '$a/3333/ bbbb' test1.txt

$i:在倒数第二行插入内容

sed '$ai3333/ bbbb' test1.txt

$r:读取其他文件内容插入到对象文件的最后一行

使用sed命令对字符串和字符的位置进行互换。

echo baominmin |sed -r 's/(bao)(min)(min)/\3\1\2/'
使用分组的方式来进行替换
echo xxxxx |sed -r 's/(.)(.)(.)(.)(.)/\5\4\3\2\1/'

sed的主要作用就是对文本的内容进行增删改查

其中最好用最强大的就是增删改查。

面试题:如何把版本号提取出来
ant-1.9.7.jar
ant-launcher-1.9.7.jar
antlr-2.7.7.jar
antlr-runtime-3.4.jar
aopalliance-1.0.jar
archaius-core-0.7.6.jar
asm-5.0.4.jar
aspectjweaver-1.9.5.jar
bcpkix-jdk15on-1.64.jar
bcprov-jdk15-1.46.jar
bcprov-jdk15on-1.64.jar
checker-compat-qual-2.5.5.jar

用grep来提取

grep -E "[0-9]+\." test2.txt

用sed提取

cat test2.txt | sed -r 's/(.*)-(.*)(\.jar)/\2/'
面试题:打印指定时间内的日志。

sed -n '/Jun 21 11:00:01/,/Jun 14:01:01/p' /var/log/messages

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

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

相关文章

PyTorch(二)张量

#c 总结 张量总结 该文档主要熟悉了「张量」的概念,理解了「张量」在深度学习中扮演的重要角色,如何判断代码中哪些属于张量。其次熟悉了张量的「四种初始化」,以及「张量属性」,「张量操作」 1 张量概念 #d 张量 「张量&…

解决Visual Studio Code在Ubuntu上崩溃的问题

解决Visual Studio Code在Ubuntu上崩溃的问题 我正在使用Ubuntu系统,每次打开Visual Studio Code时,只能短暂打开一秒钟,然后就会崩溃。当通过终端使用code --verbose命令启动Visual Studio Code时,出现以下错误信息:…

【计算机网络仿真】b站湖科大教书匠思科Packet Tracer——实验7 虚拟局域网VLAN

一、实验目的 1.学习如何划分VLAN; 2.验证划分VLAN的作用; 3.学习如何用命令行创建VLAN,将端口划分到VLAN,设置端口类型。 二、实验要求 1.使用Cisco Packet Tracer仿真平台; 2.观看B站湖科大教书匠仿真实验视频&am…

mysql、pg的sql请求处理流程

mysql的sql请求处理流程 连接器 客户端发起 SQL 查询请求时,首先会经过连接器模块。连接器模块负责管理客户端与服务器端之间的 TCP/IP 连接。它会验证用户身份,如果认证通过,就建立连接并分配相应的线程资源。 授权器 连接成功后,授权器模块会根据用户权限,检查当前用户是…

cmake和Make的安装及配置

cmake和Make的安装及配置 安装 make 工具的步骤取决于你使用的操作系统。以下是不同操作系统上安装 make 工具的指南: 在 Linux 上安装 make 对于大多数 Linux 发行版,可以使用包管理器来安装 make。以下是一些常见的 Linux 发行版的安装命令: Ubuntu/Debian sh 复制代码…

3d中模型显示黑色给不了材质---模大狮模型网

如果3D模型显示黑色,而且无法给它添加材质,可能有以下几种原因: 一:模型没有UV贴图 UV贴图是3D模型表面纹理的一种方式,如果模型没有正确的UV贴图,渲染时可能会显示黑色。在大多数3D建模软件中&#xff0c…

Docker常见面试题整理

文章目录 1. Docker 是什么?它解决了什么问题?2. Docker 和虚拟机(VM)的区别是什么?3、Docker三个核心概念4、如何构建一个 Docker 镜像?5、如何将一个 Docker 容器连接到多个网络?6、Docker Co…

Flink nc -l -p 监听端口测试

1、9999端口未占用 netstat -apn|grep 99992、消息发送端 nc -l -k -p 9999 {"user":"ming","url":"www.baidu1.com", "timestamp":1200L, "score":1} {"user":"xiaohu","url":…

GIT 合拼

合拼有多种方式: 1)合拼分支: git merge [source-branch] 2)合拼提交 : git cherry-pick [commit-hash] 3)合拼单个文件: git checkout [source-branch] – [file] 以上合拼,比如将分…

qml:一个基础的界面设计

文章目录 1、文章说明2、效果图3、重要代码说明3.1 组件切换开关下拉框矩形卡片 3.2 窗口最大化后组件全部居中3.3 菜单栏3.4 Repeater实现重复8行3.5 图片加载直接加载图片文本转图片FluentUI中可供选择的图标 1、文章说明 qt6.5.3 qml写的一个界面配置设计软件,目…

docker in docker 连私有仓库时报错 https

背景 jenkins 是使用 docker 方式部署的, 在 jenkins中又配置了 docker 的命令, 使用的宿主机的 docker 环境, 在jenkins 中执行 docker 相关命令的时候报错 jenkinse0e7b943b6e4:/$ docker login -u admin -p Harbor12345 172.16.100.15:80 WARNING! Using --password via t…

小白科普篇:详解Java对象的强引用、软引用、弱引用和虚引用

在Java中,有四种类型的引用,它们定义了对象被垃圾收集器(GC)处理的不同时机。这四种引用分别是: 强引用(Strong Reference)软引用(Soft Reference)弱引用(Weak Reference&#xff0…

算法设计与分析:动态规划法求扔鸡蛋问题 C++

目录 一、实验目的 二、问题描述 三、实验要求 四、算法思想和实验结果 1、动态规划法原理: 2、解决方法: 2.1 方法一:常规动态规划 2.1.1 算法思想: 2.1.2 时间复杂度分析 2.1.3 时间效率分析 2.2 方法二:动态规划加…

Java面试题:解释Java的类加载过程,包括加载、链接和初始化阶段

Java的类加载过程是将类从其二进制表示(通常是一个 .class 文件)加载到JVM中并准备使用的过程。这个过程分为三个主要阶段:加载(Loading)、链接(Linking)和初始化(Initialization&am…

python数据分析-糖尿病数据集数据分析预测

一、研究背景和意义 糖尿病是美国最普遍的慢性病之一,每年影响数百万美国人,并对经济造成重大的经济负担。糖尿病是一种严重的慢性疾病,其中个体失去有效调节血液中葡萄糖水平的能力,并可能导致生活质量和预期寿命下降。。。。 …

若依框架集成微信支付

1. 添加微信支付相关依赖 <!-- 微信支付 --> <dependency><groupId>com.github.wxpay</groupId><artifactId>wxpay-sdk</artifactId><version>0.0.3</version> </dependency> <dependency><groupId>com.gi…

微信小程序开发---自定义底部tabBar

自定义tabBar注意事项&#xff1a; 在自定义 tabBar 模式下 &#xff0c;为了保证低版本兼容以及区分哪些页面是 tab 页&#xff0c;app.json文件中 tabBar 的相关配置项需完整声明&#xff0c;但这些字段不会作用于自定义 tabBar 的渲染。所有 tabBar 的样式都由该自定义组件…

x86 汇编中的 “lock“ 指令详解

在深入理解 “lock” 指令之前&#xff0c;我们先来看一下 Qt 源代码中的一段 x86 汇编代码&#xff1a; q_atomic_increment:movl 4(%esp), %ecxlock incl (%ecx)mov $0,%eaxsetne %alret.align 4,0x90.type q_atomic_increment,function.size q_atomic_increment,.-q_atom…

网工常见面试题

1-10题 1.介绍TCP/IP四层、五层模型作用及每层包含的协议 TCP/IP四层模型 应用层&#xff1a; 作用&#xff1a;直接与应用程序交互&#xff0c;定义了应用程序如何通过网络发送数据。包含协议&#xff1a;HTTP&#xff08;网页浏览&#xff09;、FTP&#xff08;文件传输&…

Linux学习笔记:前言与操作系统的初识【1】

前言 为什么学习Linux 作为当下最流行的操作系统之一&#xff0c;学会如何使用和操作Linux操作系统也就是每位计算机学者的看家必备技能了。其次呢&#xff0c;本人受Linux的创始人林纳斯的影响太深了&#xff0c;觉得这个人太了不起了&#xff0c;而且人家大学里就自研开发出…