『运维备忘录』之 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.mzph.cn/news/686263.shtml

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

相关文章

【大厂AI课学习笔记】【2.1 人工智能项目开发规划与目标】(1)发现与明确问题

抱歉,过春节这几天,没有更新。赶紧续上。 人就是这样,放假之前呢,想着趁着这个假期,把很多之前没有做好的事情,都梳理好,该补的也补上,结果一个假期就这样过去了,很多想…

单反相机用sd卡还是cf卡?相机cf卡和sd卡区别

随着科技的进步,单反相机成为了摄影爱好者和专业摄影师的必备工具。而在选择单反相机存储介质时,CF卡和SD卡成为了两种常见的选择。它们各有优缺点,适用于不同的摄影需求和场景。本文将深入探讨单反相机使用SD卡还是CF卡的问题,并…

stm32:pwm output模块,记录一下我是用smt32,输出pwm波的记录--(实现--重要)

我是实现了输出pwm波,频率固定,占空比可以不断调整的方法,将PA0接到示波器上,可以看到是一个标准的PWM波,如图下面示波器图。 1,首先是ioc的配置 我刚开始设置的分频的倍数是7199,使得分频的太…

【C++搜索】体积

题目描述 给你n个物品,每种物品有一个体积Vi,求从中取出若干物品能够组成的不同的体积和有多少种可能。例如,n3,Vi(1,3,4),那么输出6。6种不同体积和具体为1,3,4,5,7,8。 输入 第一行一个整数n; 第二行…

设备驱动开发_2

编译和调试 主要内容 写一个可加载模块编译和加载一个可加载模块使用printk 进行跟踪和调试使用跟踪和调试1 写一个可加载模块 内核头文件 linux/module.h module_init(e1000_init_module) static int __init e1000_init_module(void) module_exit (e1000_exit_module) stati…

Fiddler抓包(网页、手机、MUMU模拟器)

前置条件:电脑上下载安装好了Fiddler,有浏览器 一、网页抓包 1、fiddler下载安装证书 Tools-Options 勾选下面两个框 点击下面的选项,信任证书 会弹出弹窗,点击yes(这个时候注意,DO_NOT_TRUST_FiddlerRo…

七天入门大模型 :大模型量化及低成本部署最佳实践

七天入门大模型已完成了5篇,喜欢记得收藏、关注、点赞。 七天入门大模型 :LLM大模型基础知识最全汇总七天入门大模型 :提示词工程 Prompt Engineering,最全的总结来了!七天入门大模型 :LLM和多模态模型高效…

数据结构实验之栈与队列七:出栈序列判定

数据结构实验之栈与队列七:出栈序列判定 Description 给一个初始的入栈序列,其次序即为元素的入栈次序,栈顶元素可以随时出栈,每个元素只能入栈依次。输入一个入栈序列,后面依次输入多个序列,请判断这些序…

【web | CTF】BUUCTF [BJDCTF2020]Easy MD5

天命:好像也挺实用的题目,也是比较经典吧 天命:把php的MD5漏洞都玩了一遍 第一关:MD5绕过 先声明一下:这题的MD5是php,不是mysql的MD5,把我搞迷糊了 一进来题目啥也没有,那么就要看…

物理机安装kali

ventoyU盘,ventoy做好后把kali的iso拷贝到U盘,设置U盘启动,选择kali.iso启动。 安装包 文件SHA256发布日期大小ventoy-1.0.97-windows.zip44fb53f26872c6304e1cb3d47b65d0613665666100c48deeee4cd87901fb500f2024-01-2415 MBventoy-1.0.97-linux.tar.g…

Python OpenCV 牛刀小试(练习)

BGR与RGB OpenCV在读取图像时,默认的颜色空间是BGR(蓝绿红),而在大多数其他的图像处理库和图像格式中,使用的颜色空间是RGB(红绿蓝)。因此,当你需要使用OpenCV处理图像,然…

python系统学习Day3

section4 python function part one:函数的参数 python函数的参数共有五种类型 #位置参数 def power(x):return x * x#默认参数 def power(x, n 2) #设置默认值(可省略)s 1while n > 0:n n - 1s s * xreturn s#note print(默认参数必…

人工智能学习与实训笔记(十五):Scikit-learn库的基础与使用

人工智能专栏文章汇总:人工智能学习专栏文章汇总-CSDN博客 本篇目录 一、介绍 1. 1 Scikit-learn的发展历程及定义 1.2 理解算法包、算法库及算法框架之间的区别和联系 二、Scikit-learn官网结构 三、安装与设置 3.1 Python环境的安装与配置 3.2 Scikit-lea…

【leetcode刷题之路】面试经典150题(1)——数组/字符串

文章目录 1 数组/字符串1.1 【排序】合并两个有序数组1.2【双指针】移除元素1.3 【双指针】删除有序数组中的重复项1.4 【双指针】删除有序数组中的重复项 II1.5 【数学】多数元素1.6 【数组】轮转数组1.7 【动态规划】买卖股票的最佳时机1.8 【贪心】买卖股票的最佳时机 II1.9…

【Windows】MacOS制作纯净版Windows10安装U盘

方法一、在window系统中更新win10(不更新引导程序) cp -rp /Volumes/Windows10专业版\ 64位/* /Volumes/WIN10/https://baijiahao.baidu.com/s?id1760695844372493842&wfrspider&forpc 方法二、在window系统中更新win10(更新引导程…

《Docker极简教程》--Docker容器--Docker容器的创建和使用

一、创建Docker容器 1.1 使用现有镜像创建容器 当使用现有镜像创建容器时,通常会涉及以下步骤: 获取镜像:首先,需要从Docker Hub或其他镜像仓库获取所需的镜像。可以使用docker pull命令来获取镜像,语法如下&#x…

45. 跳跃游戏 II(难度:中等)

题目链接:https://leetcode.cn/problems/jump-game-ii/ 题目描述: 给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。 每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说,如果你在 nums[i] 处,你可以跳…

软件实例分享,洗车店系统管理软件会员卡电子系统教程

软件实例分享,洗车店系统管理软件会员卡电子系统教程 一、前言 以下软件教程以 佳易王洗车店会员管理软件V16.0为例说明 软件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 1、会员卡号可以绑定车牌号或手机号 2、卡号也可以直接使用手机号&a…

【Java万花筒】优雅配置,从容应对:Java配置管理库深度解读

灵活应对变化:Java配置管理库全景解析 前言 在构建现代化的Java应用时,配置管理是一个至关重要的方面。精心设计的配置管理能够为应用提供灵活性、可维护性和适应性,而Java社区提供了多种优秀的配置管理库。本文将深入探讨一些主流的Java配…

优秀的电机驱动MCU:MM32SPIN360C

DC-DC电源布局注意点: 电源模块布局布线可提前下载芯片的datasheet(数据表),按照推荐的布局和布线进行设计。 1) 芯片电源接近原则: 对于为芯片提供电压的开关电源,应确保它尽量靠近芯片放置。这样可以避…