【shell】文本三剑客之sed详解

目录

一、sed简介(行编辑器)

二、基本用法

三、sed脚本格式(匹配地址 脚本命令)

1、不给地址,那么就是针对全文处理

2、单地址,表示#,指定的行,$表示最后一行,/pattter/:表示该模式能匹配到的每一行,正则表达式

3、地址范围:

#,# 从第几行到第几行

#,+#从第几行开始,往后加4行

/patter1/,/patter2/ 表示从第一个开始找,到第二个结束

4、步进:~

1~2:表示奇数行

2~2:表示偶数行

3~3:表示可以3的倍数行

5、高级空间用法

sed -n 'n;p' 表示打印偶数行,表示从第一行开始,先放入高级空间,下一行打印,反复以往,表示打印偶数行

sed -n '2,${n;p}' 表示奇数行,表示从第二行开始,先放入高级空间,下一行打印,反复以往,表示打印奇数行

 四、搜索替代

五、分组后项引用

面试题一:可以自定义输出匹配内容的顺序

面试题二:使用sed的分组后项引用来提取ip地址

面试题三:提取版本号

面试题四:提取文件的权限

面试题五:提取访问日志中的状态码

面试题六、提取日志的状态码


一、sed简介(行编辑器)

Sed是从文件或管道中读取一行,处理一行,输出一行;再读取一行,再处理一行,再输出一行,直到最后一行。每当处理一行时,把当前处理的行存储在临时缓冲区中,称为模式空间(PatternSpace),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。一次处理一行的设计模式使得sed性能很高,sed在读取大文件时不会出现卡顿的现象。如果使用vi命令打开几十M上百M的文件,明显会出现有卡顿的现象,这是因为vi命令打开文件是一次性将文件加载到内存,然后再打开。Sed就避免了这种情况,一行一行的处理,打开速度非常快,执行速度也很快。

sed支持 标准输入、标准输出、文件名

二、基本用法

语法:sed [命令选项]  '匹配地址 脚本命令' 文件名或标准输出或标准输入

常用的命令选项:

选项功能
-n不输出模式空间的内容到屏幕,即不自动打印
-e多点编辑器,相当于/匹配1|匹配2/
-f filename从指定文件中读取编辑脚本
-r,-E使用扩展正则表达式
-i.bak备份文件并原处编辑
#说明:
-ir 不支持
-i -r 支持
-ri   支持
-ni   会清空文件

 sed -i 作为行编辑器,一旦生效,无法撤回,所以强烈建议修改的时候加上-i.bak,可以进行备份

[root@localhost data]#sed -i.bak '1,4d' html.txt 
[root@localhost data]#cat html.txt
http://www.google.com/index.html
http://www.yahoo.com.cn/put.html
[root@localhost data]#ls
123.txt  html.txt  html.txt.bak  md5.txt  sort.sh  uniq.sh
[root@localhost data]#cat html.txt.bak ##bak也可以是别的字母,只是因为bak是backup的缩写,所以常使用bak

三、sed脚本格式(匹配地址 脚本命令

1、不给地址,那么就是针对全文处理

2、单地址,表示#,指定的行,$表示最后一行,/pattter/:表示该模式能匹配到的每一行,正则表达式

3、地址范围:

#,# 从第几行到第几行

#,+#从第几行开始,往后加4行

/patter1/,/patter2/ 表示从第一个开始找,到第二个结束

 

4、步进:~

1~2:表示奇数行

2~2:表示偶数行

3~3:表示可以3的倍数行

5、高级空间用法

sed -n 'n;p' 表示打印偶数行,表示从第一行开始,先放入高级空间,下一行打印,反复以往,表示打印偶数行

sed -n '2,${n;p}' 表示奇数行,表示从第二行开始,先放入高级空间,下一行打印,反复以往,表示打印奇数行

这些脚本命令一般与命令选项-i一起搭配使用 

脚本命令,操作

p:打印,如果是同时指定行,表示打印指定行;如果不指定行,则表示打印所有内容;如果有非打印字符,则以ASCII码输出。其通常与“-n”选项一起使用。

q:表示到第几行就退出,必须从第一行开始,3q就是1-3行

s:替换,替换指定字符

d:删除,删除选定的行

a:增加,在当前行下面增加一行指定内容

i:插入,在指定行上面插入一行指定内容

c:替换,将指定的行替换为指定内容(整行替换)

y:字符替换,转换前后的字符长度要一致

=:打印行号,这个是在前一行打印

r:表示读取文件内容,放入指定行后面

w:w file 保存模式匹配的行至指定文件

! :表示模式空间中匹配行取反处理

##没有-n,单独就是3q使用,可以表示打印前几行
[root@localhost data]#cat /etc/passwd|sed '3q'
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin

 

[root@localhost data]#seq 5|sed '3ahhhh'[root@localhost data]#seq 5|sed '3ahhhh\n    hhhh'[root@localhost data]#seq 5|sed '3a    hhhh'[root@localhost data]#seq 5|sed '3a\    hhhh'

 

 

[root@localhost data]#seq 3|sed '2r /etc/issue'
1
2
\S
Kernel \r on an \m3
[root@localhost data]#seq 3|sed '2w /data/2.txt'
1
2
3
[root@localhost data]#cat 2.txt 
2

 

 四、搜索替代

s/pattern/string/修饰符 查找替换,支持使用其它分隔符,可以是其它形式:s@@@,s###
替换修饰符:
g 行内全局替换
2 表示行内的第2个匹配内容
p 显示替换成功的行
w   /PATH/FILE 将替换成功的行保存至文件中
I,i   忽略大小写sed 's/root/&er/g' /etc/passwd
#&指代之前找到的内容
替换的内容应该是一个指定的存在的内容,不可以用正则表达式,这里可以用&这个符号指代前面匹配到的内容

五、分组后项引用

虽然sed是用来一行一行处理的,但是还是可以利用分组后项引用的办法来提取有相同标志的列

两种方式:①先匹配关键字的前后部分有什么特点,②找到关键字的特点,将整行用正则表达式采用分组表示

面试题一:可以自定义输出匹配内容的顺序

面试题二:使用sed的分组后项引用来提取ip地址

[root@localhost data]#ifconfig ens33|sed -rn '2s/.*inet ([0-9.]+) .*/\1/p'
192.168.20.8
[root@localhost data]#ifconfig ens33|sed -n '2p'inet 192.168.20.8  netmask 255.255.255.0  broadcast 192.168.20.255
[root@localhost data]#

面试题三:提取版本号

[root@localhost data]#cat jar.txt |sed -nr 's/.*-(.*).jar/\1/p'
[root@localhost data]#cat jar.txt |awk -F"(-|.jar)"  '{print $(NF-1)}'

 

面试题四:提取文件的权限

[root@localhost data]#stat 2.txt 文件:"2.txt"大小:2         	块:8          IO 块:4096   普通文件
设备:fd00h/64768d	Inode:20205496    硬链接:1
权限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
最近访问:2023-11-28 18:27:04.306430260 +0800
最近更改:2023-11-28 18:26:57.672457605 +0800
最近改动:2023-11-28 18:26:57.672457605 +0800
创建时间:-
[root@localhost data]#stat 2.txt |sed -nr '4s/.*([0-9]{4}).*/\1/p'
0644[root@localhost data]#stat 2.txt |sed -n '4p'|egrep -o "[0-9]{4}"
0644[root@localhost data]#stat 2.txt |awk -F"[(/]" 'NR==4{print $2}'
0644

面试题五:提取访问日志中的状态码

[root@localhost data]#cat log |head -5|awk -F, '{print $2}'

面试题六、提取日志的状态码

[root@localhost data]#cat log |sed -nr 's/.*HTTP\/1.1" ([0-9]{3}) .*/\1/p'|sort|uniq -c|sort -nr48814 30227141 20020057 4991674 4041317 40397 2062 408

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

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

相关文章

牛客算法题 HJ100 等差数列 golang语言实现

算法题目 HJ100 等差数列 描述 等差数列 2,5,8,11,14。。。。 (从 2 开始的 3 为公差的等差数列) 输出求等差数列前n项和数据范围: 1 ≤ � ≤ 10001≤n≤1000 输入描述&#xff…

python与机器学习1,机器学习的一些基础知识概述(完善ing)

目录 1 AI ,ML,DL,NN 等等概念分类 1.1 人工智能、机器学习、深度学习、神经网络之间的关系: 1.2 人工智能的发展 2 ML机器学习的分类:SL, USL,RL 2.1 机器学习的分类 2.2 具体的应用举例 2.3 数据分类 3 关于阈值θ和偏移量b的由来 4 不同的激…

网站定制开发对企业的好处|软件app小程序搭建

网站定制开发对企业的好处|软件app小程序搭建 在当今数字化的时代,拥有一个专属于自己企业的网站已经成为了一种趋势。而与此同时,网站定制开发作为一种针对企业需求量身定制的解决方案,也越来越受到企业的关注和青睐。那么,网站定…

SSL证书实惠品牌——JoySSL

随着互联网的普及和发展,网络安全问题日益严重。为了保护网站数据的安全,越来越多的网站开始使用SSL证书。JoySSL证书作为一款高性价比的SSL证书,受到了广泛的关注和好评。 目前市面上主流的证书基本上都是国外证书,也就是说你在验…

HarmonyOS 后台任务管理开发指南上线!

为什么要使用后台任务?开发过程中如何选择合适的后台任务?后台任务申请时存在哪些约束与限制? 针对开发者使用后台任务中的疑问,我们上线了概念更明确、逻辑结构更清晰的后台任务开发指南,包含具体的使用场景、详细的开…

js实现鼠标拖拽

目录 css代码 html代码 js代码 完整代码 效果图: 需求: 鼠标在图片内按下时 图片可以跟随盒子动 鼠标弹起图片停下来 如果图片在box的盒子里面时鼠标弹起了 就把图片展示在box里面 并且让图片回到起始位置 css代码 .div {width: 100px;height: 10…

五分钟 k8s 实战-应用探针

Probe.png 今天进入 kubernetes 的运维部分(并不是运维 kubernetes,而是运维应用),其实日常我们大部分使用 kubernetes 的功能就是以往运维的工作,现在云原生将运维和研发关系变得更紧密了。 今天主要讲解 Probe 探针相…

C语言——I /深入理解指针(三)

一、字符指针变量 在指针的类型中我们知道有⼀种指针类型为字符指针 char* ; ⼀般使⽤: int main() { char ch w; char *pc &ch; *pc w; return 0; } 还有⼀种使⽤⽅式如下: int main() { const char* pstr "hello bit.";//这⾥是把⼀个字…

jquery 地址四级联级显示 不默认选择

代码效果 <body class"bgca"><img src"./files/joinTooBg.png" style"width: 100%;object-fit: cover;" alt""><!--填写申请资料--><section><div class"zi-liao"><h3 class"zong-h…

鸿蒙应用开发之打包与上架

一、概述 当您开发、调试完HarmonyOS应用/元服务&#xff0c;就可以前往AppGallery Connect申请上架&#xff0c;华为审核通过后&#xff0c;用户即可在华为应用市场获取您的HarmonyOS应用/元服务。 HarmonyOS会通过数字证书与Profile文件等签名信息来保证应用的完整性&#…

Vue3中props传参(多种数据类型传参方式)

在Vue3中&#xff0c;props接收的type类型有以下几种&#xff1a; 1. String&#xff1a;字符串类型 2. Number&#xff1a;数字类型 3. Boolean&#xff1a;布尔类型 4. Array&#xff1a;数组类型 5. Object&#xff1a;对象类型 6. Date&#xff1a;日期类型 7. Func…

第二证券:燃料电池产业进入发展快车道 多家公司披露布局进展

据悉&#xff0c;日前太原钢铁&#xff08;集团&#xff09;有限公司初次开发出超级超纯铁素体TFC22-X连接体材料并结束了批量供货&#xff0c;填补了国内空白。 燃料电池电堆连接体材料是行业中最为要害的战略材料。研发团队打破了特别元素含量精确操控的要害技术瓶颈&#x…

【智能算法】基于黄金正弦和混沌映射思想的改进减法优化器算法

减法优化器&#xff08;Subtraction-Average-Based Optimizer&#xff0c;SABO&#xff09;是2023年刚出的智能优化算法。目前知网中文期刊基本搜不到&#xff0c;并且可以遇见未来一年文章也很少。SABO算法原理简单&#xff0c;算上初始化粒子&#xff0c;总共不超过6个公式。…

AI 学习笔记(持续更新)

What is AI PS &#xff1a;代码块里的统一是 gpt4 回复 在大模型中 1 b 10 亿参数的含义 AI 目前是什么&#xff1f; 目前的人工智能&#xff08;AI&#xff09;是指使计算机和机器能够模仿人类智能的技术&#xff0c;包括学习、推理、解决问题、知觉、语言理解等能力。A…

【论文阅读笔记】Prompt-to-Prompt Image Editing with Cross-Attention Control

【论文阅读笔记】Prompt-to-Prompt Image Editing with Cross-Attention Control 个人理解思考基本信息摘要背景挑战方法结果 引言方法论结果讨论引用 个人理解 通过将caption的注意力图注入到目标caption注意力中影响去噪过程以一种直观和便于理解的形式通过修改交叉注意力的…

界限与不动产测绘乙级申请条件

整理一期关于测绘资质界限与不动产测绘乙级资质的申请要求 测绘资质是由测绘资质主管部门自然资源部制定的 想要了解标准、正规的申请条件&#xff0c;可以到当地省份的政务网搜索测绘资质办理相关标准&#xff08;例如下图&#xff09; 1、通用标准 http://gi.mnr.gov.cn/20…

基于多模态大数据的国家安全风险态势感知模型构建

源自&#xff1a;情报杂志 “人工智能技术与咨询” 发布 摘要 [研究目的]为强化国家安全情报能力,推动风险监测预警能力提升,构建基于多模态大数据的国家安全风 险态势感知模型。 [研究方法]首先,对国家安全风险态势感知进行阐释;然后,分析多模态大数据驱动下…

【黑马甄选离线数仓day07_常见优化手段及核销主题域开发】

1.常见优化手段 1.1 分桶表基本介绍 分桶表: 分文件的, 在创建表的时候, 指定分桶字段, 并设置分多少个桶, 在添加数据的时候, hive会根据设置分桶字段, 将数据划分到N个桶(文件)中, 默认情况采用HASH分桶方案 , 分多少个桶, 取决于建表的时候, 设置分桶数量, 分了多少个桶最终…

每日一题:LeetCode-202.面试题 08.06. 汉诺塔问题

每日一题系列&#xff08;day 07&#xff09; 前言&#xff1a; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f50e…

全新仿某度文库网站源码/在线文库源码/文档分享平台网站源码/仿某度文库PHP源码

源码简介&#xff1a; 全新仿某度文库网站源码/在线文库源码&#xff0c;是以phpMySQL开发的&#xff0c;它是仿某度文库PHP源码。有功能免费文库网站 文档分享平台 实现文档上传下载及在线预览。 仿百度文库是一个以phpMySQL进行开发的免费文库网站源码。仿某度文库实现文档…