linux的sed命令

news2024/11/24 23:01:08

学习链接

Linux文本处理器sed - B站视频

文章目录

  • 学习链接
  • 基础介绍
  • 语法格式
  • sed的处理过程
  • sed的选项
    • -n
    • -e
    • -f
    • -r
    • -i
  • pattern的7种用法
  • sed中的编辑命令详解
    • p 打印
    • d 删除
    • a 行后追加
    • i 行前追加
    • r 行后追加指定文件内容
    • w 行追加到其它文件中
  • 替换操作
    • s/pattern/string
    • s/pattern/string/g
    • s/pattern/string/2g
    • s/pattern/ig
  • 行号
  • 反向引用
    • sed中引用变量注意事项
  • 实战
    • 利用sed查找文件内容
      • 脚本练习
        • 分析步骤
        • 完成脚本
    • 利用sed删除特定的内容
    • 利用sed追加文件内容

基础介绍

sed(Stream Editor),流编辑器。对标准输出或文件逐行进行处理

image-20241011220801597

可以对标准输出 或 文件 进行 修改字符串/删除该行 处理

工作模式:sed处理文本的时候,是逐行处理。会首先有个pattern来检查当前行是否匹配,如果该行匹配,那么对该行执行command编辑命令处理。如果该行不匹配,那么就不会对该行处理,而继续下一行。

语法格式

image-20241011220834674

如果未指定pattern,那么会对每一行进行处理。

针对匹配 pattern 的每一行数据,进行 command处理。

sed的处理过程

image-20241011221655194

sed的选项

image-20241011222830810

-n

只打印模式匹配的行

image-20241011224406141

image-20241011224417207

-e

表示直接在命令行进行sed编辑,默认选项

如果只有1个,那就可以不写-e,如果要处理多次,那就需要写-e

image-20241011224618188

看看输入两次一样的会是什么效果

image-20241011225010427

-f

sed的pattern和command可能特别长,所以可以把他们放到文件中,然后使用sed命令指定该文件作为pattern和command

image-20241011225931477

-r

支持扩展正则表达式

使用-r指定支持扩展正则表达式

image-20241011230519695

-i

-i,指定可以直接修改文件内容

未加-i

image-20241011231341958

加了-i

image-20241011231410658

pattern的7种用法

注意:只有这7种用法

image-20241011231754819

image-20241011233938695

image-20241011233952417

sed中的编辑命令详解

image-20241012221836513

image-20241012221931033

image-20241013002605895

p 打印

就是将匹配到的行打印出来,前面已经演示过了。加上-n,只将匹配行输出

# 将包含 usr 的行输出
sed -n '/usr/p' passwd

d 删除

image-20241013104005954

删除匹配的行

cat -n passwd

# 将第一行的内容删除并输出(不会修改原文件)
sed '1d' passwd

# 将第一行的内容删除, 原文件的第一行被删除(修改了原文件)
sed -i '1d' passwd


# 将原文件的第1行到第3行删掉
sed -i '1,3d' passwd

# 将匹配 /sbin/nologin的行删掉
sed -i '/\/sbin\/nologin/d' passwd

# 将删除匹配a的行到第2行, 如果第一行有a那就删除的是第1行和第2行并且继续找到匹配a的行删掉,直到结束。
# 如果第1行没有a, 那就继续找匹配a的行删掉,直到结束
sed -i '/a/,2d' test.txt

# 将删除从第2行到第一个匹配到a的行。如果最后一行就匹配a, 那就删除从第2行到末尾全部删除。如果最后一行不匹配a,那就删除从第2行到第一个匹配到a的行删除,后面不再继续删除。如果从第2行到最后一行都没有匹配到a的行,那就删除从第2行到末尾的所有行
sed -i '2,/a/d' test.txt

# 将以ftp开头的行开始到(最近的)以dfs开头的行结束之间所有行删掉,
# 然后继续找以ftp开头的行,到以dfs开头的行(假设说此时只找到了ftp开头的行,并未找到dfs开头的行,那么会把找到的ftp开头的行到末尾行全删掉)
sed -i '/^ftp/,/^dfs/d' passwd
...

image-20241012224339604

a 行后追加

在匹配的行后,追加指定的内容

# 在包含/bin/bash的行后,追加指定的内容(注意下面a的后面有1个空格)
sed -i '/\/bin\/bash/a This is user who can login in system' passwd

image-20241012231737568

i 行前追加

匹配到的行前追加内容

image-20241012232415451

r 行后追加指定文件内容

将后面指定文件的内容追加到匹配到的行后面

sed -i '/root/r list' passwd

image-20241012233043301

w 行追加到其它文件中

将匹配的行内容另存到其它文件中

# 终端会输出passwd的全部内容(效果与下面相同)
sed '/\/bin\/bash/w /tmp/user_login.txt' passwd

# 终端不会输出内容(效果与上面相同)
sed -n '/\/bin\/bash/w /tmp/user_login.txt' passwd

image-20241012234128216

替换操作

image-20241013151222558

image-20241013002512100

s/pattern/string

s/pattern/string/g

s/pattern/string/2g

注意pattern中如果有斜杠需要加上转义符号\

# 原文内容
[root@master ~]# cat test.txt
aaaaaaa
bbbbbbbb
ccccc
aaa
aaaaaa

# 第一个a替换为A
[root@master ~]# sed 's/a/A/' test.txt
Aaaaaaa
bbbbbbbb
ccccc
Aaa
Aaaaaa

# 每一行的第一个a替换为A
[root@master ~]# sed 's/a/A/1' test.txt
Aaaaaaa
bbbbbbbb
ccccc
Aaa
Aaaaaa

# 每一行的第2个a替换为A
[root@master ~]# sed 's/a/A/2' test.txt
aAaaaaa
bbbbbbbb
ccccc
aAa
aAaaaa

# 每一行的第3个a替换为A
[root@master ~]# sed 's/a/A/3' test.txt
aaAaaaa
bbbbbbbb
ccccc
aaA
aaAaaa

# 每一行的第4个a替换为A
[root@master ~]# sed 's/a/A/4' test.txt
aaaAaaa
bbbbbbbb
ccccc
aaa
aaaAaa

# 每一行的全部a替换为A
[root@master ~]# sed 's/a/A/g' test.txt
AAAAAAA
bbbbbbbb
ccccc
AAA
AAAAAA

# 每一行的第1个a及以后的a替换为A
[root@master ~]# sed 's/a/A/1g' test.txt
AAAAAAA
bbbbbbbb
ccccc
AAA
AAAAAA

# 每一行的第2个a及以后的a替换为A
[root@master ~]# sed 's/a/A/2g' test.txt
aAAAAAA
bbbbbbbb
ccccc
aAA
aAAAAA

# 每一行的第3个a及以后的a替换为A
[root@master ~]# sed 's/a/A/3g' test.txt
aaAAAAA
bbbbbbbb
ccccc
aaA
aaAAAA

s/pattern/ig

[root@master ~]# cat test.txt
adobeAdobeADoBe
AdoBeAdOBEadObE
adobeAdobEAdoBe
cccaaadoebadobe
[root@master ~]# sed 's/adobe/ADOBE/' test.txt
ADOBEAdobeADoBe
AdoBeAdOBEadObE
ADOBEAdobEAdoBe
cccaaadoebADOBE
[root@master ~]# sed 's/adobe/ADOBE/i' test.txt
ADOBEAdobeADoBe
ADOBEAdOBEadObE
ADOBEAdobEAdoBe
cccaaadoebADOBE
[root@master ~]# sed 's/adobe/ADOBE/1i' test.txt
ADOBEAdobeADoBe
ADOBEAdOBEadObE
ADOBEAdobEAdoBe
cccaaadoebADOBE
[root@master ~]# sed 's/adobe/ADOBE/2i' test.txt
adobeADOBEADoBe
AdoBeADOBEadObE
adobeADOBEAdoBe
cccaaadoebadobe
[root@master ~]# sed 's/adobe/ADOBE/3i' test.txt
adobeAdobeADOBE
AdoBeAdOBEADOBE
adobeAdobEADOBE
cccaaadoebadobe
[root@master ~]# sed 's/adobe/ADOBE/gi' test.txt
ADOBEADOBEADOBE
ADOBEADOBEADOBE
ADOBEADOBEADOBE
cccaaadoebADOBE
[root@master ~]# sed 's/adobe/ADOBE/1gi' test.txt
ADOBEADOBEADOBE
ADOBEADOBEADOBE
ADOBEADOBEADOBE
cccaaadoebADOBE
[root@master ~]# sed 's/adobe/ADOBE/2gi' test.txt
adobeADOBEADOBE
AdoBeADOBEADOBE
adobeADOBEADOBE
cccaaadoebadobe
[root@master ~]# sed 's/adobe/ADOBE/3gi' test.txt
adobeAdobeADOBE
AdoBeAdOBEADOBE
adobeAdobEADOBE
cccaaadoebadobe

行号

# 将匹配到的行号输出
sed -n '/\/sbin\/nologin/=' passwd

# 在匹配到的行前加1行, 内容是原来所在行的行号
sed -i '/root/=' passwd

image-20241013002414908

反向引用

image-20241013084438337

# 将每行中匹配到had..p正则的内容,替换为hadoops。(这种会改变掉原来的内容)
sed i 's/had..p/hadoops/g' str.txt

image-20241013081018383

# 将每行中匹配到had..p正则的内容,替换为目标内容,并且使用&来指代原来的全部匹配的内容
sed i 's/had..p/&s/g' str.txt

image-20241013081232045

# 使用 \1 来指代第一个括号中的内容(相比于&指代全部的内容更加灵活)
sed -i 's/\(had..ps\)/\1O/g' str.txt

image-20241013081423363

# 使用 \1 引用前面指定序号的括号中匹配的内容
sed -i 's/\(had\)...../\1doop/g' str.txt

image-20241013082513064

sed中引用变量注意事项

image-20241013084451665

# 执行脚本后,内容没有被替换,这是因为使用的是单引号,其中的$xxx被视为普通字符串,而原文中并没有$符号,因此不会替换
sed -i 's/$old_str/$new_str/g' str.txt

sed -i "s/$old_str/$new_str/g" str.txt

sed -i 's/'$old_str'/'$new_str'/g' str.txt

image-20241013083444925

image-20241013084107908

实战

利用sed查找文件内容

image-20241013103110697

脚本练习

完成对my.cnf文件的每个配置项的可以配置项数量的统计

image-20241013103151649

分析步骤

image-20241013103545000

完成脚本

image-20241013103614993

利用sed删除特定的内容

image-20241013145044377

利用sed追加文件内容

image-20241013163403340

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

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

相关文章

【AI论文精读4】RAG论文综述2(微软亚研院 2409)P2-问题定义

【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】【AI大项目】【AI应用】 P1 二、问题定义 数据增强的大语言模型(LLM)应用可以采取多种形式,从常见的基于领域特定数据的问答机器人,到复杂数据管道中的语义处理操作&#x…

AI工具在论文选题方面可以提供的帮助

学境思源,一键生成论文初稿: AcademicIdeas - 学境思源AI论文写作 在论文写作中,选题是决定研究质量和成果的关键步骤。随着人工智能技术的快速发展,AI工具在论文选题方面的应用逐渐受到关注。通过智能算法和大数据分析&#xff…

selenium安装

一、安装selenium 1,安装selenium -- 命令: pip install selenium -- 网络不稳的请换源安装: pip install selenium -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com 二、安装chrome webdriver 1.查看谷歌浏览器版本 …

Excel:vba实现合并工作表(表头相同)

这个代码应该也适用于一些表头相同的工作表的汇总,只需要修改想要遍历的表,适用于处理大量表头相同的表的合并 这里的汇总合并表 total 是我事先创建的,我觉得比用vba代码创建要容易一下,如果不事先创建汇总表就用下面的代码&…

二十一、浮动(1 文本)

<!DOCTYPE html> <html> <head> <meta charset"UTF-8"> <title></title> <style> img{ widows: 100px; float: left;/*脱离文档流*/ …

BUG调试记录:C++中有符号类型和无符号类型在自动补位时的差异

BUG调试记录&#xff1a;C中有符号类型和无符号类型在自动补位时的差异 昨天和同事一起干活的过程中&#xff0c;项目中一个函数的计算结果出现了问题&#xff0c;即使我们反复对照流程图并进行了一系列的手算也没有发现任何编码上的差错&#xff0c;在逻辑上整个函数的编写是完…

【C++入门(7)】string

一、与C语言的联系 C的string类其实是从C语言的字符串演变过来的&#xff0c;是STL中用于处理字符串的一个容器。 在C语言中&#xff0c;字符串是以 \0 为结尾的一串字符&#xff0c;为了便于操作&#xff0c;C语言标准库中也提供了不少str系列的库函数供人使用。但是这些库函…

Java生成图片_基于Spring AI

Spring AI 优势 过去&#xff0c;使用Java编写AI应用时面临的主要困境是没有统一且标准的封装库&#xff0c;开发者需自行对接各个AI服务提供商的接口&#xff0c;导致代码复杂度高、迁移成本大。如今&#xff0c;Spring AI Alibaba的出现极大地缓解了这一问题&#xff0c;它提…

vue3之生命周期钩子

Vue 组件实例生命周期 每个 Vue 组件实例在创建时都需要经历一系列的初始化步骤&#xff0c;比如设置好数据侦听&#xff0c;编译模板&#xff0c;挂载实例到 DOM&#xff0c;以及在数据改变时更新 DOM。在此过程中&#xff0c;它也会运行被称为生命周期钩子的函数&#xff0c…

基于Arduino的燃气泄漏检测系统与自动切断调节器

Arduino LPG燃气泄漏检测系统与自动切断调节器 引言 大家好&#xff0c;今天我要分享一个非常实用的项目——Arduino LPG燃气泄漏检测系统与自动切断调节器。这个项目的重要性不言而喻&#xff0c;因为燃气泄漏是一个严重的安全隐患。在厨房烹饪时&#xff0c;我们可能会忘记…

望繁信科技成功签约国显科技 流程挖掘助力制造业智造未来

近日&#xff0c;上海望繁信科技有限公司&#xff08;简称“望繁信科技”&#xff09;成功与深圳市国显科技有限公司&#xff08;简称“国显科技”&#xff09;达成合作。国显科技作为全球领先的TFT-LCD液晶显示及Mini/Micro LED显示产品供应商&#xff0c;致力于为笔记本、手机…

设计模式02-桥接模式(Java)

4.2 桥接模式 **1.定义&#xff1a;**将抽象与实现分离&#xff0c;使它们可以独立变化。它是用组合关系代替继承关系来实现&#xff0c;从而降低了抽象和实现这两个可变维度的耦合度。 2.结构&#xff1a; 抽象化角色 &#xff1a;定义抽象类&#xff0c;并包含一个对实现化…

Spring Security无脑使用

步骤1&#xff1a;添加Spring Security依赖 在你的Spring Boot项目的pom.xml文件中&#xff0c;添加Spring Security的依赖&#xff1a; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</art…

数据库的特点

数据库是有组织的&#xff0c;规范的把数据保存起来的。 怎么个组织的&#xff0c;规范的&#xff1f; 数据库的特点&#xff1a; 1.将数据放到数据表格&#xff08;二维表&#xff09;中&#xff0c;在将表格放到库中。 2.一个数据库中可以有多张表&#xff0c;每个表都有一…

【OpenCV】(四)—— 边界填充

在OpenCV的图像处理中&#xff0c;边界填充主要用于在图像边缘添加额外的像素。这项技术在多种图像处理任务中都有重要的应用&#xff0c;包括但不限于卷积操作、图像缩放、形态学操作等。 opencv中边界填充的主要方法为copyMakeBorder&#xff0c;其函数原型如下&#xff1a;…

分享一道逻辑题

1、有一个水无限多的是水塘.只有两个水瓶.一个5升一个6升.如何从水塘里用这两个水瓶取出3升水?

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-13

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-13 目录 文章目录 计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-13目录1. The Cognitive Capabilities of Generative AI: A Comparative Analysis with Human Benchmarks2. WALL-E: World Alig…

Postman 如何测试入参是文件类型(File)参数接口

Postman 如何测试 File 类型参数 前提背景测试步骤1、打开 Postman 选择 POST 方法输入调用地址2、参数选择 Body 下的 form-data3、KEY 选择 File 选项&#xff0c;并填写 file 前提背景 springboot 项目&#xff0c;接口的参数是 File 类型&#xff0c;需要通过 Postman 测试…

链表题, 反转链表 , 链表的中间结点 , 删除链表的倒数第 N 个结点 , 移除链表元素

文章目录 206. 反转链表203. 移除链表元素876. 链表的中间结点LCR 021. 删除链表的倒数第 N 个结点 206. 反转链表 题目链接 思路&#xff1a; 将原链表的结点&#xff0c;从头到尾一个个地拿下来头插到一个新链表中&#xff0c;这个新链表起始时为一个空链表。 class Solutio…

同三维T80001HK4 四路4K30HDMI H.264编码器

4路同时编码&#xff0c;带4路3.5外置音频 同三维T80001HK4四路4K30HDMI H.264编码器 同三维T80001HK4用于高清视频信号&#xff08;4K30Hz&#xff09;编码及网络传输的硬件设备&#xff0c;采用最新高效H.264高清数字视频压缩技术&#xff0c;具备稳定可靠、高清晰度、低码率…