文本三剑客之sed编辑器

sed

  • 一、sed简介
    • 1.1 什么是sed?
    • 1.2 sed原理
    • 1.3 sed核心功能
  • 二、sed命令格式详解
    • 2.1 命令格式
    • 2.2 常用选项
    • 2.3 sed脚本语法
      • 2.3.1 基本语法结构
      • 2.3.2 地址部分-----指定匹配范围
      • 2.3.3 命令部分-----要执行的命令
  • 三、sed查找替换
    • 3.1 基本语法
    • 3.2 分组+后向引用
    • 3.3 变量调用
  • 四、sed练习

在这里插入图片描述

一、sed简介

1.1 什么是sed?

Sed是一个强大的文本处理工具,其名称是Stream Editor(流编辑器)的缩写。它被设计用于根据用户定义的规则对文本进行逐行处理和转换。

Sed通过从输入流中逐行读取文本,并根据用户指定的命令来对每一行进行处理

1.2 sed原理

sed的工作原理是逐行读取输入文本,并根据用户指定的命令对每一行进行处理,通过模式匹配和命令执行来实现文本的处理和转换。

Input Text              Pattern Space              Output Text
------------            --------------            -------------
| Line 1    |    -----> |   Pattern   |    -----> |            |
| Line 2    |           |   Space     |           | Modified   |
| Line 3    |           |             |           |   Text     |
|    ...    |           |             |           |            |
------------            --------------            -------------

“Input Text” 是输入的文本,由多行组成,每一行都会依次进入 “Pattern Space”;

“Pattern Space”是 sed 使用的缓冲区。
sed 会根据用户指定的模式(例如,文本匹配规则)进行模式匹配,然后执行相关的命令来处理当前的行。

命令执行完成后,如果有修改操作,那么 “Modified Text” 将会保存修改后的文本,最后输出作为 Sed 的结果。

1.3 sed核心功能

sed的核心功能:增删改查(可配合正则表达式)
查: p​
删: d​
改: s(字符串替换)、c(整行替换)、y(对应字符进行替换,效果类似tr命令)​
增: i(在行前插入内容)、a(在行后添加内容)、r(在行后读入文件的内容)​
复制粘贴:H(复制)、d(删除)、G(粘贴到指定行下方)

二、sed命令格式详解

2.1 命令格式

sed [option]... 'script;script;...' [input  file...]选项         自身脚本语法         支持标准输入管道

2.2 常用选项

选项功能
-n不输出模式空间内容到屏幕,即不自动打印
-e多点编辑
-f FILE从指定文件中读取编辑脚本
-r或者-E使用扩展正则表达式
-i.bak备份文件并原处编辑
-s将多个文件视为独立文件,而不是单个连续的长文件流
sed -n -e '/^r/p'  -e'/^b/p' /etc/passwd 
#把passwd文件中r为首和b为首的内容打印出来

在这里插入图片描述

2.3 sed脚本语法

2.3.1 基本语法结构

[address]<command>[options]匹配范围   命令      选项address  表示要匹配的行范围,可以是单个行号、行号范围或正则表达式。
command  表示要在匹配的行上执行的命令。
options  是一些可选的参数,用于修改命令的行为。

2.3.2 地址部分-----指定匹配范围

在 sed 脚本中,地址部分用于指定要匹配的行范围。
地址部分可以是单个行号、行号范围或正则表达式。

1)不指定范围

地址部分是可选的,如果不指定地址,Sed 将对所有行都执行命令

2)单个行号

#基本格式#
sed  'n<command>' file #处理第n行的内容,n为具体正整数
#举个例子#
sed '2d' file #删除文件中的第 2 行。

3)行号范围

#基本格式#
sed 'x,y<command>' file  #处理x行到y行的内容,x和y为正整数且x<ysed 'x,+y<command>' file #处理x行和x行后y行的内容
#举个例子#
sed '2,5d' file  #删除文件中第2行到第5行的内容sed '2,+5d' file #删除文件中第2行到第7行的内容

4) 使用正则表达式匹配范围

#基本格式#
sed '/pattern/<command>' file #根据正则表达式来匹配目标行sed '/pattern1/,/pattern2/<command>' file 
#匹配正则表达式1和正则表达式2间的行,并根据command进行处理sed 'x,/pattern/<command>' file  #x行到正则表达式匹配到的行之间的内容
sed '/pattern/,y<command>' file  #正则表达式匹配到的行到y行之间的内容
#举个例子#
sed -n  '/^root/,/^byyd/p' test 

在这里插入图片描述

5)步进

'~' 符号#怎么表示奇数行?
sed  -n '1~2p' #从第一行开始,步进为2打印,即1 3 5 7。。。
sed '0~2d'#怎么表示偶数行?
sed  -n '2~2p' #从第二行开始,步进为2打印,即2 4 6 8。。。
sed '1~2d' 

6)最后一行和倒序匹配

`$` 符号用于表示最后一行sed -n '$<command>' file #对最后一行进行操作sed -n '$,$-n<command>' file #倒数第n行到最后一行
#补充知识
! 表示逻辑非操作,表示匹配不到指定的行使用 `
&& 逻辑与操作
|| 逻辑或操作

2.3.3 命令部分-----要执行的命令

命令功能
p将匹配到的行打印输出
Ip忽略大小写输出
d删除模式空间匹配的行,并立即启用下一轮循环
a\将指定的文本添加到匹配到的行后面
i\将指定的文本插入到匹配到的行前面
c\替换行为单行或多行文本
w file保存模式匹配的行至指定文件
r file读取指定文件的文本至模式空间中匹配到的行后
=为模式空间中的行打印行号
!模式空间中匹配行取反处理
q结束或退出sed
面试题
1.用sed打印到第三行sed -n '1,3p' 文件sed '3q'  文件 #q是自动退出,打印到第三行就退出2.打印从第三行开始,继续往后打印三行sed -n '3,+3p'
特殊字符和转义序列&: 表示与模式匹配的整个文本。
\1, \2, ...: 表示与模式中括号内的子表达式匹配的文本。
\n: 表示换行符。
\t: 表示制表符。
\\: 表示反斜杠。

三、sed查找替换

3.1 基本语法

sed 's/要查找的内容/替换的内容/修饰符' 文件名 
# '/'为分隔符,可以用'@' 或者 '#'
# 要查找的内容可以用正则表达式 
# 替换的内容无法用正则表达式# 修饰符 #
g 行内全局替换
p 显示替换成功的行
w   /PATH/FILE 将替换成功的行保存至文件中
I,i   忽略大小写
sed -i 's/r..t/&er/g'  /etc/passwd
# &代指前面找到的内容

3.2 分组+后向引用

分组(Grouping)
通过将模式的一部分放入一个分组中,可以将这部分模式视为一个单元,后续可以通过引用该分组在替换中使用。

后向引用(Backreference)
在替换中使用前面定义的分组的内容。在sed命令中,可以使用 \数字的形式引用分组,其中数字表示分组的顺序

在替换中使用\1来引用第一个分组的内容。如果有多个分组,可以使用\2、\3等来引用后续分组的内容。

#举个例子#echo 123abcxyz | sed -nr 's/(123)(abc)(xyz)/\1/p'
# -n 关闭自动打印 -r 使用扩展正则表达式
# 123分成1组  abc分组第二组  xyz分成第三组 
# \1/p 表示打印第一组

在这里插入图片描述

示例一:仅显示本机IP地址

ifconfig ens33 | sed -nr 's/.*inet (.*)  netmask.*/\1/p'

在这里插入图片描述
示例二:仅显示tmp文件的权限

stat tmp | sed -nr  '4s/.*\(([0-9]+)\/.*/\1/p'
# ( 和 \ 需要转译

在这里插入图片描述

3.3 变量调用

sed允许使用变量来替代文本中的特定部分。
需要先定义变量。

name=root #定义变量
sed -nr '/'$name'/p' /etc/passwd #打印出包含root的内容
或者
sed -nr /"$name"/p /etc/passwd

在这里插入图片描述

四、sed练习

示例一:增加内容( a i c )
都是临时添加

sed  '2,4ihello world' /test/passwd #在第2-4行前面添加 

在这里插入图片描述

sed '2ahello wold\n' /test/passwd #在第二行后面添加并回车

在这里插入图片描述

sed '$ahello' /test/passwd #最后一行后

在这里插入图片描述

sed '/stu0/a hello world;3p;3i shell' /test/passwd 
#a后面的内容都会被视为添加内容

在这里插入图片描述

示例二:多点编辑

sed -n -e '1p' -e '3p' /test/passwd

在这里插入图片描述

示例三:分组操作

sed -ne '/root/{s/root/ROOT/;s/x/X/g}' -ne '1,10p' /test/passwd
#/root所在行/ {将所在行的root替换成ROOT x替换成X}  打印1-10行    

在这里插入图片描述

示例四:搜索替换

#1-5行的开头加上#
sed  -n '1,5s/^/#/gp' /test/passwd
#g为全局替换

在这里插入图片描述

示例五:删除

sed '/nologin/d' /test/passwd #删除包含nologin的

在这里插入图片描述

示例六:仅提取日志文件中的IP地址和时间戳

cat log | sed -nr 's/(.*) - - \[(.*) +.*\] .*/\1 \2/p'

在这里插入图片描述

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

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

相关文章

【面试八股文】每日一题:谈谈你对线程的理解

每日一题-Java核心-谈谈你对线程的理解【面试八股文】 Java线程是Java程序中的执行单元。一个Java程序可以同时运行多个线程&#xff0c;每个线程可以独立执行不同的任务。线程的执行是并发的&#xff0c;即多个线程可以同时执行。 1. 线程的特点 Java中的线程有如下的特点 轻…

[LeetCode - Python]844. 比较;含退格的字符串(Easy);415. 字符串相加(Easy)

1.题目 844. 比较含退格的字符串&#xff08;Easy&#xff09; 1.代码&#xff1a; class Solution:def backspaceCompare(self, s: str, t: str) -> bool:# 暴力法s list(s)t list(t)M 0N 0for i in range(len(s)):i -M if s[i] # :if i > 0 :s.pop(i)s.pop(i-…

LION AI 大模型落地,首搭星纪元 ES

自新能源汽车蓬勃发展以来&#xff0c;随着潮流不断进步和变革的“四大件”有着明显变化。其中有&#xff1a;平台、智能驾驶、配置、以及车机。方方面面都有着不同程度的革新。 而车机方面&#xff0c;从以前老旧的媒体机、 CD 机发展至如今具有拓展性、开放性、智能化的车机…

Docker部署php运行环境(php-fpm+nginx)

前言 如果使用docker去部署一套php的运行环境&#xff0c;我们需要构建出nginx、php-fpm两个容器&#xff0c;nginx通过fast_cgi协议去转发php-fpm中的端口&#xff0c;从而实现web server的搭建&#xff0c;接下来以php的laravel框架为演示例子。 部署php-fpm 第一步 编写ph…

一、数学建模之线性规划篇

1.定义 2.例题 3.使用软件及解题 一、定义 1.线性规划&#xff08;Linear Programming&#xff0c;简称LP&#xff09;是一种数学优化技术&#xff0c;线性规划作为运筹学的一个重要分支&#xff0c;专门研究在给定一组线性约束条件下&#xff0c;如何找到一个最优的决策&…

Prometheus 监控系统---你值得拥有

目录 一&#xff1a;Prometheus 1、Prometheus 概述 2、应用场景 3、Prometheus 的特点 4、Prometheus 的生态组件 &#xff08;1&#xff09;Prometheus server&#xff1a;服务核心组件 &#xff08;2&#xff09;Client Library: 客户端库 &#xff08;3&#xff0…

前端开发怎么解决前端安全性的问题? - 易智编译EaseEditing

前端安全性是保护前端应用程序免受恶意攻击和数据泄露的重要方面。以下是一些解决前端安全性问题的关键方法&#xff1a; 输入验证与过滤&#xff1a; 对所有用户输入进行验证和过滤&#xff0c;防止恶意用户通过注入攻击等手段破坏应用程序或获取敏感信息。 跨站点脚本&#…

安卓移动应用开发实训室建设方案

一 、系统概述 安卓移动应用开发作为新一代信息技术的重点和促进信息消费的核心产业&#xff0c;已成为我国转变信息服务业的发展新热点&#xff1a;成为信息通信领域发展最快、市场潜力最大的业务领域。互联网尤其是移动互联网&#xff0c;以其巨大的信息交换能力和快速渗透能…

k8s 自身原理之高可用

说到高可用&#xff0c;咱们在使用主机环境的时候&#xff08;非 k8s&#xff09;&#xff0c;咱做高可用有使用过这样的方式&#xff1a; 服务器做主备部署&#xff0c;当主节点和备节点同时存活的时候&#xff0c;只有主节点对外提供服务&#xff0c;备节点就等着主节点挂了…

logstash配置文件

input { kafka { topics > “xxxx” bootstrap_servers > “ip:port” auto_offset_reset > “xxxx” group_id > “xxxx” consumer_threads > 3 codec > “json” } } filter { grok { match > { “message” > ‘%{IP:client_ip} - - [%{HTTPDATE:…

PostgreSQL父子建表查询所有的子数据-利用自定义函数查询

pgsql 函数查询代码 select find_space_tree_list_by_nodeid(1,1) 查询结果示意图 获取子集函数代码 CREATE OR REPLACE FUNCTION "public"."find_space_tree_list_by_nodeid"("nodeid" varchar, "viewid" varchar)RETURNS "…

电脑远程接入软件可以进行文件传输吗?快解析内网穿透

电脑远程接入软件的出现&#xff0c;让我们可以在两台电脑之间进行交互和操作。但是&#xff0c;很多人对于这些软件能否进行文件传输还存在一些疑问。下面的文章将解答这个问题。 1.电脑远程接入软件可以进行文件传输。传统上&#xff0c;我们可能会通过传输线或者移动存储设…

【图论】Floyd算法

一.简介 Floyd算法&#xff0c;也称为Floyd-Warshall算法&#xff0c;是一种用于解决所有节点对最短路径问题的动态规划算法。它可以在有向图或带权图中找到任意两个节点之间的最短路径。 Floyd算法的基本思想是通过中间节点逐步优化路径长度。它使用一个二维数组来存储任意两…

mongodb 数据库管理(数据库、集合、文档)

目录 一、数据库操作 1、创建数据库 2、删除数据库 二、集合操作 1、创建集合 2、删除集合 三、文档操作 1、创建文档 2、 插入文档 3、查看文档 4、更新文档 1&#xff09;update() 方法 2&#xff09;replace() 方法 一、数据库操作 1、创建数据库 创建数据库…

钛合金为何成为iPhone 15 Pro材料首选?

多年来&#xff0c;iPhone Pro一直采用厚重的钢框架&#xff0c;但不会持续太久。 有了iPhone 15 Pro&#xff0c;苹果可能会从钢框架转向钛框架&#xff0c;这不仅仅是因为它听起来更酷。钛比钢有很多优点&#xff0c;尤其是它更轻&#xff0c;这将解决iPhone Pro与普通iPhon…

Python爬虫——scrapy_日志信息以及日志级别

日志级别&#xff08;由高到低&#xff09; CRITICAL&#xff1a; 严重错误 ERROR&#xff1a; 一般错误 WARNING&#xff1a; 警告 INFO&#xff1a; 一般警告 DEBUG&#xff1a; 调试信息 默认的日志等级是DEBUG 只要出现了DEBUG或者DEBUG以上等级的日志&#xff0c;那么这些…

哪些人适合参加大数据培训班?

互联网加速职场变革&#xff0c;大数据浪潮席卷全球。日前&#xff0c;Python、大数据、人工智能是当今最热门的话题。大数据存储、大数据分析、 人工智能等开发人才需求旺盛。 大数据培训班有大数据分析培训班、大数据开发培训班&#xff0c;JAVA培训班 大数据班适学人群…

vite4+vue3+electron23.3+ts桌面应用bs端开发 打包windows、linux、max三个系统的安装包

vite4vue3electron23.3ts桌面应用bs端开发 打包windows、linux、max三个系统的安装包 主要包依赖 "electron-store": "^8.1.0", //全局数据状态管理&#xff0c;可选择性安装"electron": "23.3.8","electron-builder": &q…

【服务器】Strace显示后台进程输出

今天有小朋友遇到一个问题 她想把2331509和2854637这两个进程调到前台来&#xff0c;以便于在当前shell查看这两个python进程的实时输出 我第一反应是用jobs -l然后fg &#xff08;参考这里&#xff09; 但是发现jobs -l根本没有输出&#xff1a; 原因是jobs看的是当前ses…