shell 三剑客-sed

news2024/9/19 10:55:05

sed 是Linux 系统一款非常强大的非交互式的文本编辑器,可以对文本进行增删改查操作,正则匹配文本内容。适合大文件编辑
sed 语法
sed +选项 ‘指令’ 文件
sed +选项 -f 包含sed指令的文件 文件

常用参数

-i:直接修改文件内容,而不是输出到终端。
 
-n:安静模式,屏蔽默认输出(全部文本),只有经过sed特殊处理的那一行才会被列出来。
-e :指定sed动作,可以由多个-e指定多个动作。
 
-r:启用扩展的正则表达式,若与其他选项一起使用,应作为首个选项
 
-f :直接将sed的动作写在一个文件内,-f filename则可以运行filename 内的sed动作;
 
--help:显示帮助。
 
--version:显示版本。
 
-{}:可组合多个命令,以分号分隔

a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
d :删除,因为是删除啊,所以 d 后面通常不接任何内容;
i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
s :替换,通常这个s的动作可以搭配正规表示法!例如 1,20s/old/new/g。

准备数据

mkdir sed
cd sed
vi 01.txt
1
2
3
hi 
你好

输出所有行

#输出所有行,等同于cat 01.txt
sed '1p' 01.txt
sed -n 'p' 01.txt

在这里插入图片描述

输出指定行

#输出第1行
sed -n '1p' 01.txt
#输出第4行
sed -n '4p' 01.txt
#输出最后一行
sed -n '$p' 01.txt
#输出第5行到最后一行
sed -n '5,$p' 01.txt
#输出第5行及其后的2行内容,共3行
sed -n '5,+2p' 01.txt
#输出包含A的行
sed -n '/A/p' 01.txt
#输出包含A的行忽略大小写 I
sed -n '/A/Ip' 01.txt
#输出以a开头的行或者以r(R)开头的行
sed -n '/^a/p;/^r/Ip' 01.txt
#输出以dsf结尾的行
sed -n '/dsf$/p' 01.txt
#输出偶数行
sed -n 'n;p' a.txt
#输出奇数行
sed -n 'p;n' 01.txt

输出文档行数

sed -n '$=' 01.txt

添加 实例都是不修改源文件 如果需要修改源文件 加上-i

#从第2行开始到第4行每一行都增加一条
sed '2,4a felicia 你好 "adf"' 01.txt
sed -e 2,4a\你好! 01.txt

#不写2,4 每一行都增加一条
sed 'a felicia 你好 "adf"' 01.txt
sed -e a\你好! 01.txt
#第2行后加一行
sed '2a felicia 你好 "adf"' 01.txt
sed -e 2a\felicia,你好 01.txt
#第2行前加一行
sed '2i felicia \n你好' 01.txt
sed -e 2i\felicia,你好 01.txt

#在第1行插入02.txt 文件内容
 sed '1r 02.txt' 01.txt

删除 实例都是不修改源文件 如果需要修改源文件 加上-i

#删除所有行
sed 'd' 01.txt
#删除第1行
sed '1d' 01.txt
#删除最后1行
 sed '$d' 01.txt
 #删除所有空行
sed '/^$/d' 01.txt
#删除第2行到第5行
sed '2,5d' 01.txt
#删除包含你好或者abc 的行
sed  '/你好\|ABC/d' 01.txt
#删除包含你好或者abc 的行
sed '/你好/d;/abc/d' 01.txt
#删除包含你好并且abc的行
sed '/你好/{/abc/d}' 01.txt
#删除不以abc开头的行 !表示取反
sed  '/^abc/!d' 01.txt

取代 实例都是不修改源文件 如果需要修改源文件 加上-i

#取代第三行的内容
sed '3c 你好呀 \n好久不见' 01.txt
sed -e 3c\你好 01.txt
#取代第1行至第3行的内容
sed '1,3c aaaaa' 01.txt
#取代第1行及后面3行的内容 共4行
sed '1,+3c aaaaa' 01.txt

在这里插入图片描述

#每一行第1个你好 替换 aaa
sed 's/你好/aaa/' 01.txt
#第1行到第10行 第1个你好 替换 aaaa
sed  '1,10s/你好/aaaa/' 01.txt
#第1行到第10行 第2个你好 替换 aaaa
sed  '1,10s/你好/aaaa/2' 01.txt
#第1行到第10行 所有 你好 替换 aaaa
sed  '1,10s/你好/aaaa/g' 01.txt
#将所有的你好 替换 你好s & 表示查找串
sed 's/你好/&s/g' 01.txt
#将第1行至第3行 添加#
sed '1,3s/^/#/' 01.txt
#将所有 你好 或者ABC 或者 abc 替换成空字符 \|表示或者
sed 's/你好\|ABC\|abc//g' 01.txt

删除文件中每行的第二个、最后一个字符

#.匹配任意字符
sed 's/.//2;s/.$//' 01.txt

将文件中每行分割为 1:1个字符:2:1个字符 3:2个字符 4:剩下字符 然后按照 4-3-2-1 重新排序

#.匹配任意字符
sed -r 's/^(.)(.)(..)(.*)/\4\3\2\1/' 01.txt

将文件中每行分割为 1:1个字符:2:1个字符 3:2个字符 4:剩下字符 然后按照 4-3-2-1 重新排序

sed -r 's/(.)(.*)(.)/\3\2\1/' 01.txt

每个大写字母用()括起来

sed 's/[A-Z]/(&)/g' 01.txt

删除所有数字、行首空格

sed -r 's/[0-9]//g;s/^( )+//' 01.txt

查找roo开头的行

 sed -n '/^root/p' /etc/passwd
 #不区分大小写
 sed -n '/root/I p' /etc/passwd
 #区分大小写
 sed -n '/root/p' /etc/passwd
 #查找包含/sbin/nologin 的行
 sed -n '\%/sbin/nologin% p' /etc/passwd

复制剪切
复制:
H:模式空间—[追加]—>保持空间
h:模式空间—[覆盖]—>保持空间

粘贴:
G:保持空间—[追加]—>模式空间
g:保持空间—[覆盖]—>模式空间

#把第1-3行复制到文件末尾
#可避免出现空行
 sed '1h;2,3H;$G' test.txt
 #此处有空行时因为第一次是在保持空间里追加,而保持空间默认有一个空行
 sed '1,3H;$G' test.txt
 #把第1-2行剪切到文件末尾
 sed '1h;2H;1,2d;$G' test.txt

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

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

相关文章

用R语言运用 Shiny 包打造基于鸢尾花数据集的交互式数据可视化应用

下面内容摘录自《R 语言与数据科学的终极指南》专栏文章的部分内容,每篇文章都在 5000 字以上,质量平均分高达 94 分,看全文请点击下面链接: 1章4节:数据可视化, R 语言的静态绘图和 Shiny 的交互可视化演…

普通人看清房价走势的简单方法

研究了很多宏观方面的房价影响因素,还是很容易被看空和看多的房地产文章左右,也容易受到各种影响。 针对普通人而言,想要看清房价走势非常简单的一个方法, 你就看看你的工作状态【或者身边找工作的人多不多】 当你能挑工作的时…

老友记台词 第一季 第十三集 Friends 113(全英版)

文章目录 113 The One With the Boobies[Scene: Monica and Rachels, Chandler walks in and starts raiding the fridge. Then Rachel comes out of the shower with a towel wrapped round her waist, drying herself with another towel. Chandler and Rachel startle each …

CSC5613C 同步降压DC/DC

CSC5613C是一款同步降压型的DCDC变换器 IC,其输入电压为8~30V,具有良好的瞬态响应和环路稳定性。CSC5613C外围元器件极少,具有线补、过流保护和热保护功能。可通过调节FB电阻比例,来调整输出电压可用于快充。CSC5613C带载启动电流与其最大输出…

地下管线三维建模工具MagicPipe3D V3.5.2发布

经纬管网建模系统MagicPipe3D,本地离线参数化构建地下管网三维模型(包括管道、接头、附属设施等),输出标准3DTiles、Obj模型等格式,支持Cesium、Unreal、Unity、Osg等引擎加载进行三维可视化、语义查询、专题分析&…

WPF窗体动态效果

在浏览网页的时候,发现现在很多网页都采用这种效果。看起来很炫。 效果如下: 已经实现很久了,一直没写出来。今天突然想到,写出来分享一下 原理比较简单,就是在Window里面放一个MediaElement控件,播放视频…

shell命令行解释器—既陌生有熟悉的东西

今天做一个感性的认识来,用一个生活的例子。 你生活在有一条村子里面,在村的东边就是王婆,王婆呢?她主要做什么呢啊?她在村儿里面呢,也不种地啊,那她干什么呢?他主要做帮别人进行婚嫁…

人工智能时代,网络安全公司F5如何提高防护效能?

随着AI推动的应用和API数量迅速增长,企业面临着日益严峻的安全挑战,亟需采取有效措施来应对。AI正将数字体验推向一个全新的高度,它通过分布式部署数据源、模型和服务在企业内部、云端和边缘计算环境中,并依靠不断扩展的API网络实…

旋转字符串 | LeetCode-796 | 模拟 | KMP | 字符串匹配

🙋大家好!我是毛毛张! 🌈个人首页: 神马都会亿点点的毛毛张 🕹️KMP算法练习题 LeetCode链接:796. 旋转字符串 文章目录 1.题目描述🍑2.题解🫐2.1 暴力解法🫒2.2 模拟…

Go调度器

线程数过多,意味着操作系统会不断地切换线程,频繁的上下文切换就成了性能瓶颈.Go提供一种机制 可以在线程中自己实现调度,上下文切换更轻量,从而达到线程数少,而并发数并不少的效果,而线程中调度的就是Goroutine 调度器主要概念: 1.G:即Go协程,每个go关键字都会创建一个协程…

opencv基础的图像操作

1.读取图像,显示图像,保存图像 #图像读取、显示与保存 import numpy as np import cv2 imgcv2.imread(./src/1.jpg) #读取 cv2.imshow("img",img) #显示 cv2.imwrite("./src/2.jpg",img) #保存 cv2.waitKey(0) #让程序进入主循环(让…

Kubernetes/K8s集群1.23.6搭建

1 集群规划 HostnameIP角色centos702192.168.131.102mastercentos704192.168.131.104nodecentos705192.168.131.105node 2 安装步骤 初始操作和安装基础软件每个节点都要执行。 2.1 初始操作 2.1.1 关闭防火墙 systemctl stop firewalld systemctl disable firewalld2.1.…

单元训练06:独立按键的扩展应用

蓝桥杯 小蜜蜂 #include "stc15f2k60s2.h"// 定义LED打开 #define LED(x) \{ \P0 x; \P2 P2 & 0x1f | 0x80; \P2 P2 & 0x1f; \}// 以位数来定义第1、2至6个灯,注意&#xff…

发两张Pop!_OS 24.04-alpha版本截图

发两张Pop!_OS 24.04-alpha版本截图

《Linux运维总结:基于x86_64架构CPU使用docker-compose一键离线部署etcd 3.5.15容器版分布式集群》

总结:整理不易,如果对你有帮助,可否点赞关注一下? 更多详细内容请参考:《Linux运维篇:Linux系统运维指南》 一、部署背景 由于业务系统的特殊性,我们需要面对不同的客户部署业务系统&#xff0…

flink文档刨析

flink任务运行方式 flink任务提交方式有3种 session、per-job、application三种 flink任务运行底座也有三种,Standalone、yarn、k8s 原则上一个flink任务运行的方式由3*39种,但是有些是没法搭配的 yarn:包括yarn-session 、yarn-per-job 、…

vue2+OpenLayers 天地图上凸显出当前地理位置区域(4)

凸显出当前区域 需要当前地方的json数据 这个可以在阿里的这个阿里 看下效果图 遮盖层的逃命都是可以调的 引入 下面一段代码 import sx from "/views/json/sx1.json"; // 下载的json import GeoJSON from "ol/format/GeoJSON"; // ol的一些方法 imp…

C++ | Leetcode C++题解之第335题路径交叉

题目&#xff1a; 题解&#xff1a; class Solution { public:bool isSelfCrossing(vector<int>& distance) {int n distance.size();// 处理第 1 种情况int i 0;while (i < n && (i < 2 || distance[i] > distance[i - 2])) {i;}if (i n) {ret…

郊游、旅游管理系统-计算机毕设Java|springboot实战项目

&#x1f34a;作者&#xff1a;计算机毕设残哥 &#x1f34a;简介&#xff1a;毕业后就一直专业从事计算机软件程序开发&#xff0c;至今也有8年工作经验。擅长Java、Python、微信小程序、安卓、大数据、PHP、.NET|C#、Golang等。 擅长&#xff1a;按照需求定制化开发项目、 源…

汽车4S店管理系统-计算机毕设Java|springboot实战项目

&#x1f34a;作者&#xff1a;计算机毕设残哥 &#x1f34a;简介&#xff1a;毕业后就一直专业从事计算机软件程序开发&#xff0c;至今也有8年工作经验。擅长Java、Python、微信小程序、安卓、大数据、PHP、.NET|C#、Golang等。 擅长&#xff1a;按照需求定制化开发项目、 源…