文本三剑客其二
文本三剑客其二
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…...
微信小程序之bind和catch
这两个呢,都是绑定事件用的,具体使用有些小区别。 官方文档: 事件冒泡处理不同 bind:绑定的事件会向上冒泡,即触发当前组件的事件后,还会继续触发父组件的相同事件。例如,有一个子视图绑定了b…...
简易版抽奖活动的设计技术方案
1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...
【JavaEE】-- HTTP
1. HTTP是什么? HTTP(全称为"超文本传输协议")是一种应用非常广泛的应用层协议,HTTP是基于TCP协议的一种应用层协议。 应用层协议:是计算机网络协议栈中最高层的协议,它定义了运行在不同主机上…...
Admin.Net中的消息通信SignalR解释
定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...
对WWDC 2025 Keynote 内容的预测
借助我们以往对苹果公司发展路径的深入研究经验,以及大语言模型的分析能力,我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际,我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测,聊作存档。等到明…...
python如何将word的doc另存为docx
将 DOCX 文件另存为 DOCX 格式(Python 实现) 在 Python 中,你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是,.doc 是旧的 Word 格式,而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...
第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明
AI 领域的快速发展正在催生一个新时代,智能代理(agents)不再是孤立的个体,而是能够像一个数字团队一样协作。然而,当前 AI 生态系统的碎片化阻碍了这一愿景的实现,导致了“AI 巴别塔问题”——不同代理之间…...
反射获取方法和属性
Java反射获取方法 在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时访问和操作类的内部属性和方法。通过反射,可以动态地创建对象、调用方法、改变属性值,这在很多Java框架中如Spring和Hiberna…...
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南 在数字化营销时代,邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天,我们将深入解析邮件打开率、网站可用性、页面参与时…...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
