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

Shell脚本中的字符串截取和规则变化

文章目录

  • 前言
  • if通配符判断
  • if判断多个条件
  • 规则变化字符串的两个示例
    • 改变中间段数字
    • 改变末尾段数字
  • 总结

前言

科技的发展会带来习惯的改变,特别是对于我们这批敲代码的,之前还积累一些奇巧淫技,想着在必要的时候卖弄一下,自从生成式AI火了以后,这些技巧再无用武之地,只要无脑丢给AI就好了,他会给你实现方法,完全不用关心过程,当然,如果你想了解过程,AI也能一步步分解,直到你完全了解为止,用什么查什么,完全不用担心,比你背下来写的还快,所以再背下来已经没有用了。好久没总结了,总觉得没有沉淀,实际上很多东西不需要沉淀了,但还是写写近几天用到的东西吧。

if通配符判断

if [[ "$line" == Player_* ]]; thenecho "line 是以 Player_ 开头的数据"
fi

直接用 * 匹配变化的部分即可,这里注意 Player_* 两侧不能使用 " 包裹

if判断多个条件

if [[ "$line" == Player_* || "$line" == Pet_* || "$line" == "Home" ]]; thenecho "line 是以 Player_ 或 Pet_ 开头的数据,也可能是 Home"
fi
if [[ "$line" == Player_* ]] || \[[ "$line" == Pet_* ]] || \[[ "$line" == "Home" ]]; thenecho "line 是以 Player_ 或 Pet_ 开头的数据,也可能是 Home"
fi

两种写法,我觉得第二种写法在条件较多时更清晰一些

规则变化字符串的两个示例

改变中间段数字

将字符串 Players_00000001-300 中间数字加200,实现代码如下:

line="Players_00000001-300"
prefix="${line%%_*}_"   # 提取前缀(到第一个 _ 为止)注意末尾加了_
middle="${line#*_}"     # 剩下部分为 00000001-300
number="${middle%-*}"   # 提取 00000001
suffix="${middle#*-}"   # 提取 300new_number=$(printf "%08d" $((10#$number + 200))) # 10#$number 防止数字有前导 0 被解释为八进制,保留8位,不足补0
echo "${prefix}${new_number}-${suffix}"           # 输出结果 Players_00000201-300

改变末尾段数字

将字符串 Community#Rank#00000001 末尾数字加200,实现代码如下:

line="Community#Rank#00000001"# 拆分前两段和最后的数字部分
prefix="${line%#*}"               # 删除最后一个 # 后的部分,保留前缀,Community#Rank
number="${line##*#}"              # 删除最前面的 # 及其前缀,保留最后数字,00000001# 计算新数字(保持8位,不足补0)
new_number=$(printf "%08d" $((10#$number + 200))) # 10#$number 防止数字被当作八进制# 组合结果
echo "${prefix}#${new_number}"      # 输出结果 Community#Rank#00000201

总结

  • Shell中可以使用通配符判断字符串匹配 if [[ "$line" == Player_* ]]; then ...
  • 多个判断条件使用 || 时可以写在 [[]] 内,也可以写在外部
  • 对于字符串的规则变化可以使用分割在拼接的方式,这让我想起来贪婪模式和非贪婪模式

==>> 反爬链接,请勿点击,原地爆炸,概不负责!<<==

弱者总是期盼机会降临降临到自己头上,即使掉在旁边也不敢去捡,恨不得全世界都逼着你接受才觉得拿的心安理得,有一点点阻碍便放弃了,生怕惹得任何一个人不高兴,但谁又会在意你呢?强者会想尽一切办法去争取,努力了才可能靠近一点点~

http://www.xdnf.cn/news/77311.html

相关文章:

  • RockChip Android14 修改LCD背光最大值
  • B + 树与 B 树的深度剖析
  • 【通过Docker快速部署Tomcat9.0】
  • ubuntu20.04 远程桌面Xrdp方式
  • 伪谱法求解最优控制问题(附Python代码)
  • 技术与情感交织的一生 (七)
  • K8S节点出现Evicted状态“被驱逐”
  • 【MySQL数据库】表的约束
  • C++学习之游戏服务器开发十四QT登录器实现
  • Ubuntu与OpenHarmony OS 5.0显示系统架构比较
  • 【我的创作纪念日】 --- 与CSDN走过的第365天
  • JavaScript 笔记 --- part 5 --- Web API (part 3)
  • 【后端】构建简洁的音频转写系统:基于火山引擎ASR实现
  • 帕金森发病类型和阶段
  • 深入探讨JavaScript性能瓶颈与优化实战指南
  • 八数码难题
  • C++:STL模板
  • Spark-Streaming
  • Kafka 消息积压监控和报警配置的详细步骤
  • AbMole推荐:CRM197--增强免疫原性,突破疫苗研发困境
  • 网络安全·第五天·TCP协议安全分析
  • SuperMap GIS基础产品FAQ集锦(20250421)
  • 前台调用接口的方式及速率对比
  • 【Unity笔记】Unity + OpenXR项目无法启动SteamVR的排查与解决全指南
  • 前端之勇闯DOM关
  • 迅为iTOP-RK3576开发板/核心板6TOPS超强算力NPU适用于ARM PC、边缘计算、个人移动互联网设备及其他多媒体产品
  • NineData 与飞书深度集成,企业级数据管理审批流程全面自动化
  • 应用的“体检”与“换装”:精通Spring Boot配置管理与Actuator监控
  • Qt信号槽连接的三种方法对比
  • 通信与推理的协同冲突与架构解耦路径