LINUX命令-sed

news/2024/10/4 16:49:25/文章来源:https://www.cnblogs.com/xiaoguoic/p/18274360

本文编辑小绝技-sed

sed命令是用于对文本文件做内容操作的神器,常见的增删改都可以,查没必要用它,用grep或者gvim打开用vim的搜索匹配就行。

sed 命令的基本格式如下:

sed -hnVi 'action'

或者

sed -e expression

参数说明:

参数 含义及用法
-h help
-V version,版本信息
-i sed命令默认是将做的修改输出到终端中,并不对原始文件做修改,而-i参数后边的‘action’将直接对原始文件做修改,所以这招慎用。
-n sed命令默认会将修改后文件的全部内容输出,-n则仅显示处理后的结果
-e 前边几个action要放在‘’里,而加-e则不需要了,直接写你的expression

动作说明:

动作 作用及用法
a 新增,会将a后的字符串在目的对象或者目的行的下一行增加,用法: 目的对象/目的行a\newline 目的file。注意a后边要跟反斜杠
c 替换,可以将目的对象或者目的行替换为c后边的字符串。用法:目的行/目的对象c\替换字符串 目的file
d 删除,将目的行目的对象删除。用法:目的对象/目的行d 目的file。d后边不跟任何东西。
i 插入,在目的对象/目的行上一行插入字符串,用法基本同a。
p 打印,将目的对象目的行打印出来,同样p后不跟任何东西,常和-n参数一起用。
s 替换,最最常用的,将目的范围行内的oldlstr替换为newstr。

目的行,目的范围说明:

n 第n行
n1,n2 n1到n2行
^ 行首,多用在替换时正则匹配中
$ 尾行;如果用在s的正则匹配中,代表行尾
1 首行

目的对象说明:

目的对象及你想操作的目的字符串,可以用正则匹配,用两个斜杠左右包围:

/目的对象或者目的字符串,可用正则匹配/

下面是举了若干例子来练习,注意因为下面的练习都没加-i参数,所以都不是对原始文本直接做的修改,而是全部都输出到terminal上,同学们在应用时如果需要下面的操作都直接对原始文本做修改,sed后跟上 -i 参数就可以啦。

测试文件内容如图:

1.在第二行到第四行每行下边增加一行字符串“input [:]”

用-e的话就不用加‘’了

2.在首行前插入一行字符串“the lord ring”

3.删除整个文本中中间有空格的行,以及删除第三行到第五行之间的空格(就这个测试文件来说,其实就相当于删除全文的空格啦)

删除有空格的行:

删除第三行到第五行之间的空格,其实就是用s替换,将空格替换掉:

4.打印第6行,分别使用-n和不-n查看他们的差别

不-n

用-n

5.将3到4行替换为“new new”

6.查找并打印含有”wo“的行,并比较-n 和不 -n的差别

不-n

用-n

7.分别使用c动作和s动作,查找“wo”字符串并替换为“input [:]”

用c替换,由图可知,用c替换时将整个一行都替换掉了。

用s替换,由图可知s替换是只替换匹配到的字符。

8.$的使用,删除尾行;将ing结尾的替换为ed结尾

删除尾行

ing结尾替换为ed结尾


通过这些练习相信sed的常见用法你已经基本掌握了,不管是写shell脚本还是在terminal中提升自己的处理速度都很有用。

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

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

相关文章

毕业好几年了还要考研吗?

其实,毕业多少年都不影响我们考研,因为考研本身并没有年限或者年龄上的限制。所以,在是否考研这个问题上,我们真正应该思考的是,我们是否已经对未来做了一个比较合理的规划,考研这件事是否在未来的规划中有着重要的影响,如果是,而且现实条件也允许我们去考,那么,就应…

ubuntu 下使用netplan配置网络

一个yaml走遍天下。 netplan 是Ubuntu底层网络配置的封装,它允许使用yaml的方式“声明式”的配置底层网络,不管底层网络是NetworkManager还是networkd. netplan 官网,使用静态配置的示例: https://netplan.readthedocs.io/en/stable/netplan-tutorial/#using-static-ip-add…

(并查集+双向映射)

题意: 思路: 题目就是让我们实现把一个代表数x的集合加到另一个代表数y的集合中多次操作,这个很容易想到用并查集维护,将相同数字的下标放到一个集合中,集合所代表的数字,用“集合的首领”和代表的数字做一个双射,这样既能表示出集合所带表的数,还能辅助之后输出集合,…

2024年Java学习路线

java 最新学习路线2024Java学习路线(快速版) 核心基础:Java基础→MySQL→JDBC→JavaWeb 微服务核心:Maven→Gradle→Spring6→SpringMVC→MyBatis→MyBatisPlus→SSM →Redis7→SpringBoot2→SpringCloud 微服务生态:Git→Docker→Elasticsearch→ZooKeeper→Nginx→Sprin…

DApp设计与开发 课程笔记(二)remix | hardhat | 测试驱动开发

笔记对应课程内容为成都信息工程大学区块链产业学院老师梁培利的DApp 设计与开发 04-06 课 笔记中提到的名词不做过多解释 不懂就搜!Remix IDE的基本使用 官网:https://remix.ethereum.org/建议使用其网页版而不是桌面版,侧重于比较实用的特性而不是全部的介绍。 支持编写合…

DApp设计与开发 课程笔记(二)

笔记对应课程内容为成都信息工程大学区块链产业学院老师梁培利的DApp 设计与开发 04-06 课 笔记中提到的名词不做过多解释 不懂就搜!Remix IDE的基本使用 官网:https://remix.ethereum.org/建议使用其网页版而不是桌面版,侧重于比较实用的特性而不是全部的介绍。 支持编写合…

OOP第三次博客

write_by_23201707_gongjunjie oop第三次博客 一:前言 这次博客不出意外是oop课程的最后一次博客了,不过这次博客pta只有两题,但是我想说的是,最后一次pta也是够难的, 但是好像我自己的设计也有很大的问题,第七次pta遗留下了一点问题,导致第八次出现了很多问题 二:关于…

cpp

没有合适的默认构造函数可用 加上这个地方就ok

ingress-nginx-controller部署

Ingress Controller介绍及部署实践 1. 概念 1.1 Ingress Ingress 提供从集群外部到集群内服务的 HTTP 和 HTTPS 路由。 流量路由由 Ingress 资源所定义的规则来控制。 下面是 Ingress 的一个简单示例,可将所有流量都发送到同一 Service:通过配置,Ingress 可为 Service 提供外…

chrome 谷歌浏览器,F12 开发者工具打开太慢问题

把语言 English(UK) 设置为 English(US) 就可以解决打开速度慢的问题。linhuaming

6/24死神永生服周报第六期

1. 死神永生新闻 2. 死神永生炸服始末 3. TNT军事基地[二]目录死神永生新闻 死神永生炸服始末 TNT军事基地[二]死神永生新闻\(\color {darkred} \texttt {临近期末,更新较慢。。。}\) 前一周的治理新闻时间 人 行为 处罚方案6.22 BoredOstrich310153 炸服(出生点旁边,但不严…

hadoop04_MapReduce

MapReduce 模型MapReduce 核心思想是移动任务而非移动数据MapReduce 是一种编程模型,对数据集执行 MAP 映射,然后对结果进行 Reduce 规约,适用于大规模数据集的并行计算。核心思想可以理解为分治法,数据固定不动,分派计算任务到不同计算节点计算。 模型介绍 MapReduce 适用…