『运维备忘录』之 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 变量要使用双引号。

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

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

相关文章

C++中的volatile:穿越编译器的屏障

C中的volatile:穿越编译器的屏障 在C编程中,我们经常会遇到需要与硬件交互或多线程环境下访问共享数据的情况。为了确保程序的正确性和可预测性,C提供了关键字volatile来修饰变量。本文将深入解析C中的volatile关键字,介绍其作用、…

【c++】list 模拟

> 作者简介:დ旧言~,目前大二,现在学习Java,c,c,Python等 > 座右铭:松树千年终是朽,槿花一日自为荣。 > 目标:能手撕list模拟 > 毒鸡汤:不为模糊…

蓝桥杯:C++模运算、快速幂

模运算 模运算是大数运算中的常用操作。如果一个数太大,无法直接输出,或者不需要直接输出,则可以对它取模,缩小数值再输出。取模可以防止溢出,这是常见的操作。 模是英文mod的音译,取模实际上是求余。 取…

交通管理|交通管理在线服务系统|基于Springboot的交通管理系统设计与实现(源码+数据库+文档)

交通管理在线服务系统目录 目录 基于Springboot的交通管理系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、用户信息管理 2、驾驶证业务管理 3、机动车业务管理 4、机动车业务类型管理 四、数据库设计 1、实体ER图 五、核心代码 六、论文参考 七、最新计…

【超级干货】ArcGIS_空间连接_工具详解

帮助里对空间连接的解释: 根据空间关系将一个要素的属性连接到另一个要素。 目标要素和来自连接要素的被连接属性写入到输出要素类。 如上图所示,关键在于空间关系,只有当两个要素存在空间关系的时候,空间连接才有用武之地。 一…

方式0控制流水灯循环点亮

#include<reg51.h> //包含51单片机寄存器定义的头文件 #include<intrins.h> //包含函数_nop_&#xff08;&#xff09;定义的头文件 unsigned char code Tab[]{0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};//流水灯控制码&#xff0c;该数组被定义为全局变量 sbit…

《UE5_C++多人TPS完整教程》学习笔记15 ——《P16 会话接口委托(Session Interface Delegates)》

本文为B站系列教学视频 《UE5_C多人TPS完整教程》 —— 《P16 会话接口委托&#xff08;Session Interface Delegates&#xff09;》 的学习笔记&#xff0c;该系列教学视频为 Udemy 课程 《Unreal Engine 5 C Multiplayer Shooter》 的中文字幕翻译版&#xff0c;UP主&#xf…

2.12日学习打卡----初学RocketMQ(三)

2.12日学习打卡 目录&#xff1a; 2.12日学习打卡一. RocketMQ高级特性&#xff08;续&#xff09;消息重试延迟消息消息查询 二.RocketMQ应用实战生产端发送同步消息发送异步消息单向发送消息顺序发送消息消费顺序消息全局顺序消息延迟消息事务消息消息查询 一. RocketMQ高级特…

红蓝对抗:网络安全领域的模拟实战演练

引言&#xff1a; 随着信息技术的快速发展&#xff0c;网络安全问题日益突出。为了应对这一挑战&#xff0c;企业和组织需要不断提升自身的安全防护能力。红蓝对抗作为一种模拟实战演练方法&#xff0c;在网络安全领域得到了广泛应用。本文将介绍红蓝对抗的概念、目的、过程和…

【精品】关于枚举的高级用法

枚举父接口 public interface BaseEnum {Integer getCode();String getLabel();/*** 根据值获取枚举** param code* param clazz* return*/static <E extends Enum<E> & BaseEnum> E getEnumByCode(Integer code, Class<E> clazz) {Objects.requireNonN…

ASCII编码的诞生:解决字符标准化与跨平台通信的需求

title: ASCII编码的诞生&#xff1a;解决字符标准化与跨平台通信的需求 date: 2024/2/17 14:27:01 updated: 2024/2/17 14:27:01 tags: ASCII编码标准化跨平台字符集兼容性简洁性影响力 在计算机的发展过程中&#xff0c;字符的表示和传输一直是一个重要的问题。为了实现字符的…

python-自动化篇-终极工具-用GUI自动控制键盘和鼠标-pyautogui

文章目录 用GUI自动控制键盘和鼠标pyautogui 模块鼠标——记忆宫殿屏幕位置——移动地图——pyautogui.size鼠标位置——自身定位——pyautogui.position()移动鼠标——pyautogui.moveTo拖动鼠标——滚动鼠标——scroll 键盘按下键盘释放键盘 开始与结束通过注销关闭所有程序 用…

linux系统zabbix监控分布式监控的部署

分布式监控 服务器安装分布式监控安装工具安装mysql导入数据结构配置proxy端浏览器配置 zabbix server端监控到大量zabbix agent端&#xff0c;这样会使zabbix server端压力过大&#xff0c;使用zabbix proxy进行分布式监控 服务器安装分布式监控 安装工具 rpm -Uvh https://…

HTML | DOM | 网页前端 | 常见HTML标签总结

文章目录 1.前端开发简单分类2.前端开发环境配置3.HTML的简单介绍4.常用的HTML标签介绍 1.前端开发简单分类 前端开发&#xff0c;这里是一个广义的概念&#xff0c;不单指网页开发&#xff0c;它的常见分类 网页开发&#xff1a;前端开发的主要领域&#xff0c;使用HTML、CS…

网络安全威胁,如何解决缓冲区溢出攻击

目录 一、什么是网络安全 二、什么是缓冲区 三、缓冲区溢出 四、缓冲区溢出攻击的类型 一、什么是网络安全 网络安全&#xff08;Network Security&#xff09;指的是保护计算机网络及其相关设备、系统和数据免受未经授权访问、破坏、篡改、窃取或滥用的威胁和攻击。随着网…

单片机学习笔记---LCD1602

LCD1602介绍 LCD1602&#xff08;Liquid Crystal Display&#xff09;液晶显示屏是一种字符型液晶显示模块&#xff0c;可以显示ASCII码的标准字符和其它的一些内置特殊字符&#xff08;比如日文的片假名&#xff09;&#xff0c;还可以有8个自定义字符 显示容量&#xff1a;…

linux系统zabbix工具监控web页面

web页面监控 内建key介绍浏览器配置浏览器页面查看方式 监控指定的站点的资源下载速度&#xff0c;及页面响应时间&#xff0c;还有响应代码&#xff1b; web Scenario&#xff1a; web场景&#xff08;站点&#xff09;web page &#xff1a;web页面&#xff0c;一个场景有多…

Excel TEXT函数格式化日期

一. 基本语法 ⏹Excel 的 TEXT 函数用于将数值或日期格式化为指定的文本格式 TEXT(value, format_text)二. 拼接路径案例 # 将当前单元格日期格式化 "ls -ld /data/jmw/01/"&TEXT(A2,"YYYYMMDD")&""# 此处的日期, 是名称管理器里面定…

深入解析鸿蒙系统的页面路由(Router)机制

鸿蒙系统以其独特的分布式架构和跨设备的统一体验而备受瞩目。在这个系统中&#xff0c;页面路由&#xff08;Router&#xff09;机制是连接应用各页面的关键组成部分。本文将深入探讨鸿蒙系统的页面路由&#xff0c;揭示其工作原理、特点以及在应用开发中的实际应用。 1. 实现…

【每日一题】06 排序链表

问题描述 给你链表的头结点 head &#xff0c;请将其按 升序 排列并返回 排序后的链表 。 求解 /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/ struct ListNode* sortList(struct ListNode* head) {struct…