当前位置: 首页 > 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 ...
  • 多个判断条件使用 || 时可以写在 [[]] 内,也可以写在外部
  • 对于字符串的规则变化可以使用分割在拼接的方式,这让我想起来贪婪模式和非贪婪模式

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

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

相关文章:

  • 深度学习基石:神经网络核心知识全解析(一)
  • 运行neo4j.bat console 报错无法识别为脚本,PowerShell 教程:查看语言模式并通过注册表修改受限模式
  • 【Java面试笔记:基础】5.String、StringBuffer、StringBuilder有什么区别?
  • transformer 子层连接结构
  • 迅为iTOP-RK3576开发板/核心板6TOPS超强算力NPU适用于ARM PC、边缘计算、个人移动互联网设备及其他多媒体产品
  • ElasticSearch深入解析(一):Elastic Stack全景
  • Java实例化对象都有几种方式
  • (undone) 吴恩达版提示词工程 3. 迭代 (建议用到的时候再根据目录针对看)
  • 学习笔记——《Java面向对象程序设计》-继承
  • PyTorch DDP 跨节点通信的底层机制
  • C++学习之游戏服务器开发十四QT登录器实现
  • 文献×汽车 | 基于 ANSYS 的多级抛物线板簧系统分析
  • 什么事Nginx,及使用Nginx部署vue项目(非服务器Nginx压缩包版)
  • 边缘计算全透视:架构、应用与未来图景
  • 区间分组详解
  • 83k Star!n8n 让 AI 驱动的工作流自动化触手可及
  • 使用Spark-TTS-0.5B模型,文本合成语音
  • Lua 第7部分 输入输出
  • React.cloneElement的用法详解
  • Flowable 与 bpmn.io@7.0 完整集成示例 Demo
  • 继微软之后,亚马逊也放缓人工智能数据中心计划
  • 88岁罗马教皇方济各突然去世,遗嘱内容对外公布
  • 经济日报刊文谈外卖平台仍试图凭补贴制造超低价:苦练内功摆脱“内卷式”竞争
  • 人民日报刊文:美国滥施关税及中国反制措施的法理视角透析
  • 第一集|《蛮好的人生》蛮好,《悬镜》挺玄
  • 韩国新一届总统选举将于6月3日举行,民调显示李在明继续领跑