文本三剑客其二
文本三剑客其二
sed和awk
grep就是查找文本当中的内容,扩展正则表达式。
sed 对文本内容进行增删改查
sed是一种流编辑器,一次处理一行内容。
如果只是展示,会放在缓冲区(模式空间),展示结束之后,会从模式空间把操作结果删除。
一行一行处理,处理完当前行,才会处理下一行。直到文件末尾。
sed的命令格式和操作选项:
sed -e '操作符' -e '操作符' 文件1 文件2
-e 表示可以跟多个操作符,只要有一个操作,-e可以省略。
sed -e '操作符1;操作符2' 文件1 文件2
选项:
-e:用于执行多个操作命令
-f:在脚本中定义好了操作符,然后根据脚本内容的操作符对文件进行操作
-i:直接修改目标文件(慎用)
-n:仅显示script处理后的结果(不加-n,sed会有两个输出结果,加了-n之后就会把默认输出屏蔽,只显示一个结果)
-r:扩展正则表达式
操作符:
p:打印结果
s:替换,替换字符串
c:替换,替换指定行
y:替换,替换单个字符,多个字符替换必须和替换内容的字符长度保持一致。
d:删除,删除行
a:增加,在指定行的下面一行插入内容
i:增加,在指定行的上面一行插入指定内容
=:标出行号
r:在行后增加文本内容
$a 在最后一行插入新的内容
$i 在最后一行上一行插入新的内容
$r 读取其他文件的内容,然后插入到对象文件的最后一行。
打印功能:
寻址打印
[root@localhost opt]# sed -n '=;p' test1.txt 1 13770325194 2 13131301010 3 111111111111
打印最后一行
[root@localhost opt]# cat -n test1.txt | sed -n '$p' 9 root1rootroot
行号范围打印:
打印第二行到第六行
[root@localhost opt]# cat -n test1.txt | sed -n '2,6p'2 131313010103 1111111111114 5 6 aaacvvaada
打印第二行和最后一行
[root@localhost opt]# cat -n test1.txt | sed -n '2p;$p'2 131313010109 root1rootroot
打印奇数行
[root@localhost opt]# cat -n test1.txt | sed -n 'p;n' #n的作用打印一行,跳过下一行1 137703251943 1111111111115 7 root-root9 root1rootroot
打印偶数行
[root@localhost opt]# cat -n test1.txt | sed -n 'n;p' #n的作用是跳过一行,打印下一行2 131313010104 6 aaacvvaada8 root
如何对文本内容进行过滤
[root@localhost opt]# cat -n test1.txt | sed -n '/o/p' #过滤并打印包含o的行 //之间是包含的要过滤的内容7 root-root8 root9 root1rootroot
使用正则表达式对文本内容进行过滤
[root@localhost opt]# sed -n '/^root/p' /etc/passwd #以root为开头 root:x:0:0:root:/root:/bin/bash [root@localhost opt]# sed -n '/bash$/p' /etc/passwd #以bash为结尾 root:x:0:0:root:/root:/bin/bash zhang:x:1000:1000:zhang:/home/zhang:/bin/bash dn:x:1001:1001::/home/dn:/bin/bash xy102:x:1002:1002::/home/xy102:/bin/bash
从指定行开始,打印到第一个bash为结尾的行
[root@localhost opt]# sed -n '42,/bash$/p' /etc/passwd postfix:x:89:89::/var/spool/postfix:/sbin/nologin tcpdump:x:72:72::/:/sbin/nologin zhang:x:1000:1000:zhang:/home/zhang:/bin/bash
面试题1
如何免交互删除文本内容。不删除文件。
[root@localhost opt]# sed -i 'd' test2.txt [root@localhost opt]# cat test2.txt
或者
[root@localhost opt]# cat /dev/null > test2.txt [root@localhost opt]# cat test2.txt
sed 的删除操作
[root@localhost opt]# sed -in '1,3d;p' test2.txt 4 5 6 7 8
匹配字符串删除行
[root@localhost opt]# sed -n '/1/,/5/d;p' test2.txt 6 7 8
面试题2:
如何免交换的方式删除空行
sed的方式
[root@localhost opt]# sed '/^$/d' test1.txt 13770325194 13131301010 111111111111 aaacvvaada root-root root root1rootroot
grep
[root@localhost opt]# grep -v "^$" test1.txt 13770325194 13131301010 111111111111 aaacvvaada root-root root root1rootroot
cat
[root@localhost opt]# cat test1.txt | tr -s "\n" 13770325194 13131301010 111111111111 aaacvvaada root-root root root1rootroot
sed的替换
s替换字符串:
[root@localhost opt]# sed -n 's/root/test/gp' /etc/passwd #g是替换所有,g换成数字几就替换每行第几个 test:x:0:0:test:/test:/bin/bash operator:x:11:0:operator:/test:/sbin/nologin
[root@localhost opt]# sed -n '4,6 s/^/#/p' test1.txt #注释4-6行 [root@localhost opt]# sed -n -e '4s/^/#/p' -e '6s/^/#/p' test1.txt #注释4和6行
首字母变成大写
[root@localhost opt]# sed 's/[a-z]/\u&/' test1.txt 13770325194 13131301010 111111111111 Aaacvvaada Root-root Root Root1rootroot #u& 是转换首字母大写的特殊符号,\转义符
将单词的字母全部变为大写
[root@localhost opt]# sed 's/[a-z]/\u&/g' test1.txt 13770325194 13131301010 111111111111 AAACVVAADA ROOT-ROOT ROOT ROOT1ROOTROOT
将大写转换为小写
[root@localhost opt]# sed 's/[A-Z]/\l&/' test3.txt aAA bBB cCC dDD #l&把大写转换成小写的特殊字符,\转义符
[root@localhost opt]# sed 's/[A-Z]/\l&/g' test3.txt aaa bbb ccc ddd #g是将单词的所有字母大写转换为小写
c 整行替换
[root@localhost opt]# sed '/IPADDR=192.168.60.20/c IPADDR=192.168.60.100' /etc/sysconfig/network-scripts/ifcfg-ens33 TYPE=Ethernet DEVICE=ens33 ONBOOT=yes BOOTPROTO=static IPADDR=192.168.60.100 NETMASK=255.255.255.0 GATEWAY=192.168.60.2 DNS1=218.2.135.1 DNS2=221.131.143.69
y 单个字符替换
[root@localhost opt]# sed 'y/abc/123/' test3.txt AAA BBB CCC DDD 123
增加
a 在指定行下插入
[root@localhost opt]# sed '/AAA/a zhang' test3.txt AAA zhang BBB CCC DDD abc ABD
i 在指定行上一行插入新的内容
[root@localhost opt]# sed '/AAA/i zhang' test3.txt zhang AAA BBB CCC DDD abc ABD
r:在行后增加文本内容
[root@localhost opt]# sed '/BBB/r test4.txt' test3.txt AAA BBB zxc CCC DDD abc ABD
$a 在最后一行插入新的内容
[root@localhost opt]# sed '$a shuai dn' test3.txt AAA BBB CCC DDD abc ABD shuai dn
$i 在最后一行上一行插入新的内容
[root@localhost opt]# sed '$i shuai dn' test3.txt AAA BBB CCC DDD abc shuai dn ABD
$r 读取其他文件的内容,然后插入到对象文件的最后一行。
[root@localhost opt]# sed '$r test4.txt' test3.txt AAA BBB CCC DDD abc ABD zxc
使用sed命令对字符串和字符的位置进行互换
[root@localhost opt]# echo chengqianshuai | sed -r 's/(cheng)(qian)(shuai)/\3\1\2/' shuaichengqian [root@localhost opt]# echo 成乾真的帅 | sed -r 's/(.)(.)(.)(.)(.)/\5\4\3\2\1/' 帅的真乾成
面试题3:
ant-1.9.7.jar ant-launcher-1.9.7.jar antlr-2.7.7.jar antlr-runtime-3.4.jar aopalliance-1.0.jar archaius-core-0.7.6.jar asm-5.0.4.jar aspectjweaver-1.9.5.jar bcpkix-jdk15on-1.64.jar bcprov-jdk15-1.46.jar bcprov-jdk15on-1.64.jar checker-compat-qual-2.5.5.jar
将版本号显示出来
grep
[root@localhost opt]# cat -n 456.txt | grep -E "\b[0-9][.][0-9][.][0-9]\b|\b[0-9][.][0-9]+\b"

sed
[root@localhost opt]# cat 456.txt | sed -r 's/(.*)-(.*)(\.jar)/\2/' 1.9.7 1.9.7 2.7.7 3.4 1.0 0.7.6 5.0.4 1.9.5 1.64 1.46 1.64 2.5.5
面试题4
打印指定时间内的日志
[root@localhost opt]# cat /var/log/messages | sed -r -n '/Jun 21 12:00:01/,/Jun 21 13:00:01/p' Jun 21 12:00:01 localhost systemd: Created slice User Slice of root. Jun 21 12:00:02 localhost systemd: Started Session 255 of user root. Jun 21 12:00:02 localhost systemd: Removed slice User Slice of root. Jun 21 12:01:01 localhost systemd: Created slice User Slice of root. Jun 21 12:01:01 localhost systemd: Started Session 256 of user root. Jun 21 12:01:01 localhost systemd: Removed slice User Slice of root. Jun 21 12:10:01 localhost systemd: Created slice User Slice of root. Jun 21 12:10:01 localhost systemd: Started Session 257 of user root. Jun 21 12:10:01 localhost systemd: Removed slice User Slice of root. Jun 21 12:20:01 localhost systemd: Created slice User Slice of root. Jun 21 12:20:01 localhost systemd: Started Session 258 of user root. Jun 21 12:20:01 localhost systemd: Removed slice User Slice of root. Jun 21 12:30:01 localhost systemd: Created slice User Slice of root. Jun 21 12:30:01 localhost systemd: Started Session 259 of user root. Jun 21 12:30:01 localhost systemd: Removed slice User Slice of root. Jun 21 12:40:01 localhost systemd: Created slice User Slice of root. Jun 21 12:40:01 localhost systemd: Started Session 260 of user root. Jun 21 12:40:01 localhost systemd: Removed slice User Slice of root. Jun 21 12:50:01 localhost systemd: Created slice User Slice of root. Jun 21 12:50:01 localhost systemd: Started Session 261 of user root. Jun 21 12:50:01 localhost systemd: Removed slice User Slice of root. Jun 21 13:00:01 localhost systemd: Created slice User Slice of root.
相关文章:
文本三剑客其二
文本三剑客其二 sed和awk grep就是查找文本当中的内容,扩展正则表达式。 sed 对文本内容进行增删改查 sed是一种流编辑器,一次处理一行内容。 如果只是展示,会放在缓冲区(模式空间),展示结束之后&…...
【达梦数据库】typeorm+node.js+达梦数据库返回自增列值
1.配置环境,下载依赖包 typeorm init --name test22 --database mysql typeorm-dm,uuid,typeorm2,修改连接信息 修改src/ data-source.ts 文件 连接dm,可参考刚刚安装typeorm-dm 模块中的 README.md 3.修改自增信息 /* 修改前*/PrimaryGen…...
【ARMv8/ARMv9 硬件加速系列 2.1 -- ARM NEON 向量寄存器单个元素赋值】
文章目录 NEON 向量寄存器单个元素赋值对 v0.4s中的一个元素赋值对 v1.16b 中的一个元素赋值MOVI (Move Immediate)NEON 向量寄存器单个元素赋值 在ARMv8架构中,你可以使用特定的指令来对v0.4s和v1.16b中的单个元素赋值。这通常通过使用MOV(Move)指令的变种实现,具体取决于…...
GD32学习
参考视频13.立创开发板GD32教程:串口配置_哔哩哔哩_bilibili 固件库跟用户手册基本上差不多,只不过用用户手册编写程序的话会更加的底层,固件库的话就是把一些函数封装起来,用的时候拿过来即可,目前我还没有找到固件库…...
LangChain:如何高效管理 LLM 聊天历史记录?
LangChain 团队发布了一篇关于使用 Dragonfly DB 来有效管理 LangChain 应用程序聊天历史记录的教程。 该教程旨在解决用户在使用 LangChain 应用程序时普遍遇到的一个问题:如何高效地管理聊天历史记录。 LangChain 团队在推文中强调了 Dragonfly DB 在管理聊天历…...
【React】useState 更新延迟的原因是什么,怎么解决?
useState 更新延迟的原因 异步更新:React 中的 useState 更新是异步的,这意味着当你调用更新函数(如 setData)时,React 并不立即同步更新状态,而是将其放入一个待处理的队列中,稍后在适当的时候(如在下一次渲染之前)进行处理。因此,如果你尝试在调用更新函数后立即读…...
非关系型数据库NoSQL数据层解决方案 之 redis springboot整合与读写操作 2024详解以及window版redis5.0.14下载百度网盘
redis下载安装以及基本使用 下载地址 链接:百度网盘 请输入提取码 提取码:0410 一个名对应一个数值 内存级 在内存里进行操作 准备启动 我们现在就有一个redis客户端的服务器了 我们再启动一个cmd 操作redis数据库 redis里面的基本数据类型有五种 …...
jigdo无法下载的文件
问题描述 用jigdo下载Debian的iso镜像,剩下最后一个文件下载不了,提示信息: Found 0 of the 1 files required by the template Copied input files to temporary file debian-12.5.0-amd64-DLBD-2.iso.tmp - repeat command and supply mo…...
C#面:C# 类的执行顺序?
C# 类的执行顺序可以分为以下几个步骤: 静态字段初始化:在类的第一次使用之前,静态字段会被初始化。静态字段的初始化顺序是按照它们在代码中的声明顺序进行的。静态构造函数:如果类中定义了静态构造函数,它会在类的第…...
昇思25天学习打卡营第3天|数据集Dataset
一、简介: 数据是深度学习的基础,高质量的数据输入将在整个深度神经网络中起到积极作用。有一种说法是模型最终训练的结果,10%受到算法影响,剩下的90%都是由训练的数据质量决定。(doge) MindSpore提供基于…...
SpringCloud 服务调用 spring-cloud-starter-openfeign
在Spring Cloud中,spring-cloud-starter-openfeign 是一个用于声明式Web服务客户端(例如REST客户端)的启动器。它使得在Spring Cloud应用中调用其他HTTP服务变得非常简单,只需创建一个接口并使用注解来定义服务调用的细节。 以下…...
基于Elementui组件,在vue中实现多种省市区前端静态JSON数据展示并支持与后端交互功能,提供后端名称label和id
基于Elementui组件,在vue中实现多种省市区前端静态数据(本地JSON数据)展示并支持与后端交互功能,提供后端名称label和id 话不多说,先上图 1.支持传递给后端选中省市区的id和名称,示例非常完整,…...
基于DPU的云原生裸金属网络解决方案
1. 方案背景和挑战 裸金属服务器是云上资源的重要部分,其网络需要与云上的虚拟机和容器互在同一个VPC下,并且能够像容器和虚拟机一样使用云的网络功能和能力。 传统的裸金属服务器使用开源的 OpenStack Ironic 组件,配合 OpenStack Neutron…...
pip install镜像源(更新和换源)
pip install镜像源(更新和换源) 1.pip安装依赖包默认访问的源: 因为服务器架设在国外的缘故,很多时候不好用网速不行,这时候就需要选择国内的一些安装源安装相应的包 https://pypi.Python.org/simple/2.设置默认源 …...
基础语法——组合与继承
继承 定义派生类,即继承的一般语法结构如下 class 派生类名 : [继承方式] 基类名 { }; 例如 class Point{int x, y; public:Point(int a0, int b0): x(a), y(b){}virtual double area() {return 0.0; };virtual double volume() { return 0.0; } }; class Circl…...
openGauss开发者大会、华为云HDC大会举行; PostgreSQL中国技术大会7月杭州开启
重要更新 1. openGauss Developer Day本周五于北京举行,大会聚集了相关行业专家、用户、伙伴和开发者,分享给予openGauss的联合创新成果和实践案例。([2] ) ;华为云 HDC 2024本周五于东莞松山湖举行,主题演讲主要覆盖鸿蒙、AI ([3…...
编译报错:No rule to make target xx/libcam.halmemory_intermediates/export_includes
问题现象: make: *** No rule to make target ‘out/target/product/testdd6737m_35g_m0/obj/STATIC_LIBRARIES/libcam.halmemory_intermediates/export_includes’, needed by ‘out/target/product/testdd6737m_35g_m0/obj/SHARED_LIBRARIES/libcam_platform_inte…...
【备考指南】CDA Level Ⅰ 最全备考攻略
很多考生朋友在报名前后,一直不知道需要怎么备考,这里给大家盘点一下最全的备考攻略,希望对你有用: 1、需要准备好之后再报名吗? 不需要,CDA认证考试是报名后自行预约考试的,您可以先报名同时…...
【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 5G基站光纤连接问题(200分) - 三语言AC题解(Python/Java/Cpp)
🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 …...
分层Agent
分层Teams 分层Agent创建tool研究团队工具文档编写团队工具 通用能力定义Agent团队研究团队文档编写团队 添加图层 分层Agent 在前面的示例(Agent管理)中,我们引入了单个管理节点的概念,用于在不同工作节点之间路由工作。 但是&a…...
基于FPGA的PID算法学习———实现PID比例控制算法
基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...
Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)
文章目录 1.什么是Redis?2.为什么要使用redis作为mysql的缓存?3.什么是缓存雪崩、缓存穿透、缓存击穿?3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...
页面渲染流程与性能优化
页面渲染流程与性能优化详解(完整版) 一、现代浏览器渲染流程(详细说明) 1. 构建DOM树 浏览器接收到HTML文档后,会逐步解析并构建DOM(Document Object Model)树。具体过程如下: (…...
苍穹外卖--缓存菜品
1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据,减少数据库查询操作。 缓存逻辑分析: ①每个分类下的菜品保持一份缓存数据…...
智能仓储的未来:自动化、AI与数据分析如何重塑物流中心
当仓库学会“思考”,物流的终极形态正在诞生 想象这样的场景: 凌晨3点,某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径;AI视觉系统在0.1秒内扫描包裹信息;数字孪生平台正模拟次日峰值流量压力…...
Spring数据访问模块设计
前面我们已经完成了IoC和web模块的设计,聪明的码友立马就知道了,该到数据访问模块了,要不就这俩玩个6啊,查库势在必行,至此,它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据(数据库、No…...
Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)
参考官方文档:https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java(供 Kotlin 使用) 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...
稳定币的深度剖析与展望
一、引言 在当今数字化浪潮席卷全球的时代,加密货币作为一种新兴的金融现象,正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而,加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下,稳定…...
佰力博科技与您探讨热释电测量的几种方法
热释电的测量主要涉及热释电系数的测定,这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中,积分电荷法最为常用,其原理是通过测量在电容器上积累的热释电电荷,从而确定热释电系数…...
WebRTC从入门到实践 - 零基础教程
WebRTC从入门到实践 - 零基础教程 目录 WebRTC简介 基础概念 工作原理 开发环境搭建 基础实践 三个实战案例 常见问题解答 1. WebRTC简介 1.1 什么是WebRTC? WebRTC(Web Real-Time Communication)是一个支持网页浏览器进行实时语音…...
