当前位置: 首页 > news >正文

文本三剑客之 sed 编辑器

一.sed 概述

1.sed 介绍

sed是一种流编辑器,流编辑器会在编辑器处理数据之前基于预先提供的一组规则来编辑数据流。

sed编辑器可以根据命令来处理数据流中的数据,这些命令要么从命令行中输入,要么存储在一个

命令文本文件中。

2.sed 的工作流程

读取:sed 从输入流(文件、管道、标准输入)中读取一行内容并存储到临时的缓冲区中(又称模式空间,pattern space)。

执行:默认情况下,所有的sed 命令都在模式空间中顺序地执行,除非指定了行的地址,否则sed 命令 将会在所有的行上依次执行。
显示:发送修改后的内容到输出流。在发送数据后,模式空间将会被清空。在所有的文件内容都被处理完成之前,上述过程将重复执行,直至所有内容被处理完。

在所有的文件内容都被处理完成之前,上述过程将重复执行,直至所有内容被处理完。

注意:默认情况下所有的sed命令都是在模式空间内执行的,因此输入的文件并不会发生任何变化,除非是用重定向存储输出。

3.常用的选项

-e    或--expression=:表示用指定命令来处理输入的文本文件,只有一个操作命令时可省略,一般在执行多个操作命令使用-f    或--file=:表示用指定的脚本文件来处理输入的文本文件。-h    或--help:显示帮助。-n    --quiet 或 silent:禁止sed编辑器输出,但可以与p命令一起使用完成输出。p 打印功能-i    直接修改目标文本文件。

4.命令格式

sed -e '操作命令' 目标文件 ....      #在命令行指定操作命令处理文件行数据

sed -e '操作' 文件1 文件2    ...sed -n -e '操作' 文件1 文件2 ...sed -f 脚本文件 文件1 文件2  ...sed -i -e '操作' 文件1 文件2 ...sed -e 'n{
操作1
操作2
...
}' 文件1 文件2 ...

二.sed 的常用操作

s:替换,替换指定字符。d:删除,删除选定的行。a:增加,在当前行下面增加一行指定内容。i:插入,在选定行上面插入一行指定内容。c:替换,将选定行替换为指定内容。y:字符转换,转换前后的字符长度必须相同。p:打印,如果同时指定行,表示打印指定行;如果不指定行,则表示打印所有内容;
如果有非打印字符,则以 ASCII 码输出。其通常与“-n”选项一起使用。=:打印行号。l(小写L):打印数据流中的文本和不可打印的ASCII字符(比如结束符$、制表符\t)

1.打印内容功能

(1)sed  的 p 选项

打印内容   p(打印行内容)  =(打印行号)   l(打印ASCII字符)

(2)打印指定的地址

sed编辑器有2种寻址方式:
【1】以数字形式表示行区间
【2】用文本模式来过滤出行

sed -n -e 'n;p' test1.txt  的演示过程

第一次过程  读取  第一行   执行  先n  跳到到下一行  (第二行)   再p  打印第二行内容

第二次过程  读取  第三行   执行  先n  跳到到下一行  (第四行)   再p  打印第四行内容

第三次过程  读取  第五行   执行  先n  跳到到下一行  (第六行)   再p  打印第六行内容

sed -n -e '2,${n;p}' test1.txt
第一次过程   读取  第二行    执行 先n   跳到下一行 (第三行)     再p 打印第三行内容 
第二次过程   读取  第四行    执行 先n   跳到下一行 (第五行)     再p 打印第五行内容 
第三次过程   读取  第六行    执行 先n   跳到下一行 (第七行)     再p 打印第七行内容 

 sed 默认只支持默认正则表达式使用,想要使用扩展表达式需要加上 - r  选项

联合使用

2. 删除功能

sed 的 的选项

 拓展:在一个脚本文件里定义操作命令

sed -f 脚本文件  目标文件 ....                    

使用指定脚本文件里的操作命令处理文件行数据

提前在文件里定义一个操作可以指定文件加上 - f 选项进行操作处理;也可以进行多行操作。

vim a.shp;n

 vim a.txt=p;n

 拓展2:sed -i

3.替换功能

替换    s(字符串替换)    c(整行内容替换)     y(对应字符替换)

行范围 s/旧字符串/新字符串/替换标记

4种替换标记:
数字:     表明新字符串将替换第几处匹配的地方
g:           表明新字符串将会替换所有匹配的地方
p:           打印与替换命令匹配的行,与-n一起使用
w 文件:  将替换的结果写到文件中

如果想要删除root字符

如果想要删除 /etc/yum.conf 文件里的第15行到第26行删除注释

如果想要/etc/yum.conf 文件里第1行到第12行加上注释

如果想要只注释 /etc/fstab 文件里的 swap

如果想要给编辑的文件新保存;可以使用重定向输出的方式,也可以通过sed 命令 w 操作来保存,不过只会保存修改的内容

 sed  's/.*swap.*/#&/w /opt/fstab2' /etc/fstab

拓展:/ 可以被替换

sed -e 's/\bin\/bash/\/sbin\/nologin/g' /etc/passwdsed -e 's#bin/bash#/sbin/nologin#g' /etc/passwd两者效果一样, /  可以替换成任意符号都可以做到替代\的作用
sed 's9\945\9\99\98\939g' test.txt   的含义将\954\9\9 替换成 \98\93

替换的高级功能

sed -e '行号c 新行内容'
sed -e '/字符串/c 新行内容'

sed -e 'y/旧字符/新字符/' 

4.插入功能

a(在指定行下面插入行内容)

i(在指定行上面插入行内容)

r(在指定行下面插入整个文件内容)

sed -e '行号区间a 行内容'
sed -r -e '/字符串或正则/a 行内容'sed -e '行号区间i 行内容'
sed -r -e '/字符串或正则/i 行内容'sed -e '行号区间r 文件'

读入文件内容

5.复制粘贴功能

 H(复制指定行到剪切板)    G(将剪切板内容粘贴到指定行下面)

sed -e '1,3H;$G'           #将1-3行内容复制粘贴到最后一行下面sed -e '1,3{H;d};$G'       #将1-3行内容剪切粘贴到最后一行下面

 拓展:将echo 11122233 替换成 321321321;将每个字符用()括起来重新用 \ 分配位置即可

http://www.lryc.cn/news/351274.html

相关文章:

  • 【MySQL精通之路】SQL优化(1)-查询优化(3)-索引合并
  • Linux中安装配置并使用samba服务(Centos以及Ubuntu)
  • three.js能实现啥效果?看过来,这里都是它的菜(06)
  • 利用ESP32-C3将TF卡内容变成U盘进行读取
  • C++小病毒
  • 使用VUE3+TS+elementplus创建一个增加按钮
  • Python面试宝典:文件读写和上下文管理器以及输入输出流面试题(1000加python面试题助你轻松捕获大厂Offer)
  • Spring Boot | Spring Boot 实现 “记住我“ 功能
  • AGM AG32 MCU替代GD32F407/STM32F407的手持示波器方案
  • MongoDB基础入门到深入(八)MongoDB整合SpringBoot、Chang Streams
  • linux下的nfs概述与实验(openEuler22.03)
  • 影响Oracle数据库打开速度的因素
  • dify:开源 LLMOps平台。
  • CCF20220601——归一化处理
  • 用Ai编写一个电机驱动程序
  • 【C++入门】—— C++入门 (下)_内联函数
  • Java数据结构与算法(最小栈)
  • 7 Series FPGAs Integrated Block for PCI Express IP核 Advanced模式配置详解(三)
  • k8s 部署mqtt简介
  • 汇凯金业:量化交易中常用的数学模型有哪些
  • 局部直方图均衡化去雾算法
  • selenium环境安装和web自动化基础
  • 【UE Websocket】“WebSocket Server”插件使用记录
  • spring中依赖注入(DI)是什么?
  • paligemma、Grounding-DINO-1.5简单无需标注无需训练直接可以使用的VLM图像到文本模型
  • FreeRTOS学习——FreeRTOS队列(下)之队列创建
  • js实现鼠标拖拽多选功能
  • postgres_exporter 监控pg坑一:备库无延迟但是监控告警备库延迟
  • vue打包部署到springboot,通过tomcat运行
  • 如何有效防止数据丢失