『运维备忘录』之 Sed 命令详解

运维人员不仅要熟悉操作系统、服务器、网络等只是,甚至对于开发相关的也要有所了解。很多运维工作者可能一时半会记不住那么多命令、代码、方法、原理或者用法等等。这里我将结合自身工作,持续给大家更新运维工作所需要接触到的知识点,希望大家喜欢。

今天我们要讲的是 Sed 命令


一、简介

Sed 全名为 Stream Editor(流编辑器),是 Linux  下一款功能强大的非交互流式文本编辑器,可以对文本文件进行增、删、改、查等操作,支持按行、按字段、按正则匹配文本内容,灵活方便,特别适合于大文件的编辑。它主要依赖于正则表达式。本文主要介绍 sed 的一些基本用法和使用实例。

1.1. Sed 的工作流程

  • Read:SED 从输入流(文件、管道或标准输入)中读取一行并将其存储在其内部缓冲区中,称为pattern buffer.
  • Execute:所有 SED 命令都按顺序应用于模式缓冲区。默认情况下,除非指定了行寻址,否则 SED 命令将应用于所有行(全局)。
  • Display:将(修改后的)内容发送到输出流。发送数据后,模式缓冲区将为空。
  • 重复上述过程,直到文件用完。

二、基本用法

$ sed [选项] command [文件]

参数说明:

参数说明示例
-r, -E使用扩展正则表达式sed -E 's/[0-9]+//g' input-file
-e执行多个 sed 命令sed -e 'command1' -e 'command2' input-file
-f执行 sed 脚本文件sed -f script.sed config.conf
-i直接对内容进行修改,不加-i时默认只是预览,不会对文件做实际修改sed -i 's/On/Off/' php.ini
-n取消默认输出,sed默认会输出所有文本内容,使用-n参数后只显示处理过的行sed -n '3 p' config.conf

2.1. Sed 中的编辑命令

命令示例描述
psed -n '1,4 p' input.txt打印第 1-4 行
psed -n -e '1,4 p' -e '6,7 p' input.txt打印第 1-4 行和第 6-7 行
dsed '1,4 d' input.txt打印除 1-4 之外的行
wsed -n '1,4 w output.txt' input.txt将模式空间写入文件
ased '2 a new-line' input.txt在后面追加一行
ised '2 i new-line' input.txt在前面插入行

2.2. Sed 中的循环命令

参数描述
b label分支到标签(用于循环)
t label仅在成功替换时分支到标签(用于循环)
:labelb 和 t 命令的标签(用于循环)
N将下一行追加到模式空间
P多行打印第一行
D删除多行中的第一行

2.3. Sed 中的杂项标志

参数描述
/ | ^ @ ! #替换分隔符可以是任何字符
&获取匹配的模式
( ) \1 \2 \3使用 ( 和 ) 进行分组
使用 \1、\2 替换来引用组

2.4. Sed 中替换的结尾标志

$ sed 's/old/new/[flags]' [input-file]

上述 [flag] 的参数释义:

参数描述
g全球替代
1,2...替换第 n 次出现
p仅打印替换的行
w仅将替换的行写入文件
I搜索时忽略大小写
e在命令行中替换并执行

三、Sed 实例

3.1. 替换文本

$ sed 's/old/new/g' file.txt    # 替换所有出现的字符串
$ sed 's/old/new/2' file.txt    # 仅替换第 n 次出现的字符串
$ sed '5 s/old/new/' file.txt   # 仅在第 5 行替换替换字符串
$ sed '/hello/s/world/universe/' file.txt   # 将“world”替换为“universe”,但前提是该行以“hello”开头
$ sed 's/\\$//' file.txt    # 从每行的末尾删除“\”
$ sed 's/^\s*//' file.txt   # 删除每行开头的所有空格
$ sed 's/#.*$//' file.txt   # 删除评论。 即使是那些在行尾的

3.2. 搜索文本

$ sed -n '/hello/p' file.txt    # 搜索字符串并仅打印匹配的行
$ sed -n '/hello/Ip' file.txt   # 不区分大小写的搜索
$ sed -n '/hello/!p' file.txt   # 搜索字符串,但仅输出不匹配的行

3.3. 追加行

$ sed '2a Text after line 2' file.txt   # 在第 2 行之后追加一行
$ sed '$a THE END!' file.txt            # 在文件末尾追加一行
$ sed '3~3a Some text' file.txt         # 从第 3 行开始,每 3 行后追加一行
$ sed '5i line number five' file.txt    # 在第 5 行之前插入文本
$ sed '/hello/i Example: ' file.txt     # 在包含“hello”的每一行之前插入“Example:”

3.4. 删除行

$ sed '5,7d' file.txt    # 删除文件中的第 5-7 行
$ sed '3~2d' file.txt    # 删除从第 3 行开始的每 2 行
$ sed '$d' file.txt      # 删除文件的最后一行
$ sed '/^Hello/d' file.txt   # 删除以“Hello”开头的行
$ sed '/^$/d' file.txt   # 删除所有空行
$ sed '/^#/d' file.txt   # 删除以“#”开头的行

3.5. 文件格式调整

$ sed G          # 双倍行距
$ sed '/^$/d;G'  # 删除所有空行和双空格
$ sed 'G;G'      # 三倍空间文件
$ sed 'n;d'      # 撤消双倍行距
$ sed '/regex/{x;p;x;}'    # 在匹配“正则表达式”的行上方插入一个空行
$ sed '/regex/G'           # 在匹配“正则表达式”的行下方插入一个空行
$ sed '/regex/{x;p;x;G;}'  # 在匹配“正则表达式”的行周围插入一个空行

3.6. Sed 编号

$ sed = file.txt | sed 'N;s/\n/\t/'   # 文件的数字行(简单的左对齐)
$ sed = file.txt | sed 'N; s/^/   /; s/ *\(.\{6,\}\)\n/\1  /'   # 文件的数字行(数字在左,右对齐)
$ sed '/./=' file.txt | sed '/./N; s/\n/ /'   # 文件的数字行,但如果行不为空,则仅打印数字
$ sed -n '$='   # 计算行数(模拟“wc -l”)

注意:在 sed 命令里引用 shell 变量要使用双引号。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【镜头知识】对焦和变焦

前言 变焦 调整某几个镜片的相对位置,从而改变镜片组的焦距,进而改变图像的视场角度。 焦距和视角以及拍摄距离的关系这张图能更好的体现: 视角越窄,也意味着放大的倍数越大! 对焦 物体反射的光线,有很多不…

高B格可视化大屏设计具备的10大特征

简洁明了: 可视化大屏界面应该尽可能简洁明了,突出重点,避免过多的信息和视觉干扰。同时,需要考虑到用户的视觉效果和易用性,使用户能够迅速地获取所需信息。 数据精准: 可视化大屏界面显示的数据应该准确…

秒懂百科,C++如此简单丨第二十天:贪心算法2

目录 Everyday English 前言 洛谷 P1031 均分纸牌 题目描述 思路点拨 AC代码 洛谷 P1094 纪念品分组 题目描述 样例输入 样例输出 思路点拨 AC代码 洛谷 P2660 zzc 种田 题目描述 思路点拨 AC Code 结尾 Everyday English Dont miss the opportunity. 机不可…

代码随想录 Leetcode435. 无重叠区间

题目&#xff1a; 代码(首刷看解析 2024年2月17日&#xff09;&#xff1a; class Solution { private:const static bool cmp(vector<int>& a,vector<int>& b) {return a[0] < b[0];} public:int eraseOverlapIntervals(vector<vector<int>&…

离线数仓(二)【用户行为日志采集平台搭建】

用户行为日志采集平台搭建 1、用户行为日志概述 用户行为日志的内容&#xff0c;主要包括用户的各项行为信息以及行为所处的环境信息。收集这些信息的主要目的是优化产品和为各项分析统计指标提供数据支撑。收集这些信息的手段通常为埋点。 目前主流的埋点方式&#xff0c;有代…

C++文件操作->文本文件(->写文件、读文件)、二进制文件(->写文件、读文件)

#include<iostream> using namespace std; #include <fstream>//头文件包含 //文本文件 写文件 void test01() { //1.包含头文件 fstream //2.创建流对象 ofstream ofs; //3.指定打开方式 ofs.open("test.txt", ios::out); //4.写…

【杂谈】裁我?我是研发,我是研发啊!

闲谈 这两年互联网是越来越不太平了&#xff0c;前有国外互联网裁员的妖风四起&#xff0c;后来寒气又传到国内&#xff0c;让我们这群打工人叫苦连天。最近有部电影蛮火的&#xff0c;叫《年会不能停》&#xff0c;感觉跟我前司很相似&#xff0c;不过好像由于今年业绩不太行…

第1集《佛遗教经》

《佛遗教经》和尚尼慈悲&#xff0c;诸位法师、诸位居士&#xff0c;阿弥陀佛&#xff01;好&#xff0c;请放掌。 我们从今天开始有六个讲次&#xff0c;跟大家共同学习《佛遗教经》。在正式讲这部经之前&#xff0c;我想先简单的说明本经的特色。 身为一个佛弟子&#xff0…

OpenCV-40 绘制直方图

一、使用matplotlib画直方图 可以利用matplotlib把OpenCV统计得到的直方图绘制出来 示例代码如下&#xff1a; import cv2 import matplotlib.pyplot as pltlena cv2.imread("beautiful women.png") # 变为黑白图片 gray cv2.cvtColor(lena, cv2.COLOR_BGR2GRAY…

《Linux 简易速速上手小册》第8章: 安全性与加固(2024 最新版)

文章目录 8.1 防火墙与安全策略8.1.1 重点基础知识8.1.2 重点案例&#xff1a;配置 iptables 以保护 Web 服务器8.1.3 拓展案例 1&#xff1a;使用 firewalld 配置动态防御区域8.1.4 拓展案例 2&#xff1a;配置 ufw 以简化管理 8.2 SSH 安全最佳实践8.2.1 重点基础知识8.2.2 重…

人工智能学习与实训笔记(六):神经网络之智能推荐系统

人工智能学习笔记汇总链接&#xff1a;人工智能学习与实训笔记汇总-CSDN博客 本篇目录 七、智能推荐系统处理 7.1 常用的推荐系统算法 7.2 如何实现推荐 7.3 基于飞桨实现的电影推荐模型 7.3.1 电影数据类型 7.3.2 数据处理 7.3.4 数据读取器 7.3.4 网络构建 7.3.4.1…

vue-ESlint (六)

代码规范 代码规范&#xff1a;一套写代码的约定规则。例如&#xff1a;"赋值符号的左右是否需要空格" "一句结束是否是要加;" . 老话说&#xff1a;"没有规矩不成方圆" → 正规的团队 需要 统一的编码风格 JavaScript Standard Style 规范说…

成本效能FinOps: Crane 部署

目录 一、实验 1.环境 2.安装kind 3.安装Crane 二、问题 1.脚本安装prometheus报错 2.查看集群信息失败 3.Helm添加grafana 报错 4.查看crane资源失败 5.prometheus部署时kube-state-metrics 拉取镜像显示ImagePullBackOff 6.Crane 功能与架构 一、实验 1.环境 &a…

智慧公厕的主要应用

在现代社会中&#xff0c;随着城市化进程的加速推进&#xff0c;公共卫生设施的建设和管理变得愈加重要。而智慧公厕作为一种新型城市公共设施&#xff0c;正以其智能化、高效化的特点&#xff0c;成为改善城市卫生环境的重要手段。智慧公厕运用物联网、互联网、大数据、云计算…

HAL/LL/STD STM32 U8g2库 +I2C SSD1306/sh1106 WouoUI磁贴案例

HAL/LL/STD STM32 U8g2库 I2C SSD1306/sh1106 WouoUI磁贴案例 &#x1f4cd;基于STM32F103C8T6 LL库驱动版本&#xff1a;https://gitee.com/chcsx/platform-test/tree/master/MDK-ARM&#x1f3ac;视频演示&#xff1a; WouoUI移植磁贴案例&#xff0c;新增确认弹窗 &#x1f…

无人驾驶LQR控制算法 c++ 实现

参考博客&#xff1a; &#xff08;1&#xff09;LQR的理解与运用 第一期——理解篇 &#xff08;2&#xff09;线性二次型调节器(LQR)原理详解 &#xff08;3&#xff09;LQR控制基本原理&#xff08;包括Riccati方程具体推导过程&#xff09; &#xff08;4&#xff09;【基础…

精品jsp+ssm鲜花销售管理系统-购物商城

《[含文档PPT源码等]精品jspssm鲜花销售管理系统[包运行成功]》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程、包运行成功&#xff01; 使用技术&#xff1a; 开发语言&#xff1a;Java 框架&#xff1a;ssm 技术&#xff1a;JSP JDK版本&#x…

微信小程序如何配置服务器域名

目录 一、微信小程序 二、域名 三、服务器 四、如何配置服务器域名 一、微信小程序 微信小程序是一种轻量级的应用程序&#xff0c;用户无需下载安装即可使用&#xff0c;具有便捷、快捷的特点。微信小程序可以在微信内直接使用&#xff0c;无需离开微信即可完成各种功能&…

Leetcode - 周赛384

目录 一&#xff0c;3033. 修改矩阵 二&#xff0c;3035. 回文字符串的最大数量 三&#xff0c;3036. 匹配模式数组的子数组数目 II 一&#xff0c;3033. 修改矩阵 这道题直接暴力求解&#xff0c;先算出每一列的最大值&#xff0c;再将所有为-1的区域替换成该列的最大值&am…

人工智能学习与实训笔记(七):神经网络之推荐系统处理

九、模型压缩与知识蒸馏 出于对响应速度&#xff0c;存储大小和能耗的考虑&#xff0c;往往需要对大模型进行压缩。 模型压缩方法主要可以分为以下四类&#xff1a; 参数修剪和量化&#xff08;Parameter pruning and quantization&#xff09;&#xff1a;用于消除对模型表…