在 Bash 中提取子字符串

2023-11-25

给定表格中的文件名someletters_12345_moreleters.ext,我想提取5位数字并将它们放入一个变量中。

因此,为了强调这一点,我有一个包含 x 个字符的文件名,然后是一个五位数字序列,两侧各有一个下划线,然后是另一组 x 个字符。我想取出 5 位数字并将其放入变量中。

我对实现这一目标的不同方法非常感兴趣。


您可以使用参数扩展去做这个。

If a是常数,下面的参数展开执行子串提取:

b=${a:12:5}

where 12是偏移量(从零开始)并且5是长度

如果输入中只有数字周围的下划线,则可以分两步(分别)去掉前缀和后缀:

tmp=${a#*_}   # remove prefix ending in "_"
b=${tmp%_*}   # remove suffix starting with "_"

如果还有其他下划线,尽管更棘手,但无论如何它可能都是可行的。如果有人知道如何在一个表达式中执行两种扩展,我也想知道。

提供的两种解决方案都是纯 bash,不涉及进程生成,因此速度非常快。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Bash 中提取子字符串 的相关文章

随机推荐

  • 为什么必须“导入”Python 标准库函数? [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我是 Python 编码新手 并且有 PHP 背景 我很好奇为什么你必须在 python 脚本顶部 导入 函数 在 PHP 中 您可以简单地使用以下函数 sleep 10 以上将
  • 不知道如何构建任务“db:create”

    我正在从 sqlite 数据库迁移到 mysql2 我正在运行 mysql 并更改了database yml 但由于某种原因 我的 rake db create 返回了 rake aborted Don t know how to buil
  • JSF 2 上的 https,用于受保护的资源和登录

    我有一个具有 2 个属性的托管 bean userName password 及其各自的 getter 和 setter 方法 以及login 访问数据库以验证登录凭据的方法 我的问题是 当用户单击 登录 按钮时 该操作必须通过 https
  • 在 select2 多选中加载值

    我在用着select2代替搜索框 在这里我用来加载这样的国家值 countries select2 multiple true tags India Japan Australia Singapore tokenSeparators 当我按
  • AngularJS/Jade 错误:参数“MyController”不是函数,未定义(MEAN)

    我知道这个问题的变体已经被问过好几次了 但是我已经尝试了其他OP的几种建议解决方案 但无法解决这个问题 并且希望得到一些澄清 我正在使用基本的平均待办事项列表应用程序 http www mean io 实现一个简单的控制器后 我遇到了 错误
  • 我可以在 jQuery 模板中声明本地/临时变量吗?

    是否可以在 jQuery 模板语法中声明新变量 我希望能够达到与此相当的效果 这不起作用 var test test div test div 我知道这已经得到回答并接受 但这是另一个解决方案 data localVariable SOME
  • 为什么我通过 spawn() 创建的 Node 子进程挂起?

    我正在使用 spawn 进行 git 调用 有时它工作正常 但有时它似乎挂起 我没有看到任何事件触发 错误 退出 关闭 但我看到有证据表明该过程实际上已成功完成 var spawn require child process spawn s
  • 无法将内容添加到新的 Plone 站点:ValueError:无法找到 update_version_before_edit 异常

    刚刚使用统一安装程序在 CentOs 上成功安装了 Plone 4 2 1 登录后我无法添加任何内容 我收到以下错误 Traceback innermost last Module ZPublisher Publish line 126 i
  • 如何识别 DLL 是调试版本还是发布版本(在 .NET 中)[重复]

    这个问题在这里已经有答案了 可能的重复 如何判断 NET 应用程序是在 DEBUG 还是 RELEASE 模式下编译的 我确信以前有人问过这个问题 但是谷歌和SO搜索让我失败了 如何识别 DLL 是发布版本还是调试版本 恕我直言 上述应用程
  • Maven 3.0 的“mvn release:perform”不喜欢不在 git repo 根目录中的 pom.xml

    我有一个关于 Maven maven release plugin git 集成 pom xml 以及将 pom xml 放在存储库本地副本的子目录而不是根目录中的问题 这是设置 我有一个 github 帐户 其中私人存储库数量有限 我想
  • 表单 ModelChoiceField 查询集 + 额外的选择字段 django 表单

    我正在尝试创建一个表单 其中 ModelChoiceField 从查询集加载 并且我想向 ModelChoiceField 添加一些自定义值以进行扩展 我使用了选择字段 如下所示 但在更新表单时 出现以下错误 表格错误 选择一个有效的选择
  • 在 Perl 中查找两个等长字符串之间差异的快速方法

    给定像这样的字符串对 my s1 ACTGGA my s2 AGTG A Note the string can be longer than this 我想在其中找到职位和性格 s1它的不同之处在于 s2 在这种情况下 答案是 Strin
  • 带有 angularjs 的动态子域

    我是 Angularjs 新手 我想添加动态子域 例如sub domain com 通过更改 sub 我将能够从服务器请求正确的数据 但是 主页仍然是相同的 sub1 domain com and sub2 domain com将会有相同的
  • 使用未部署在 Azure 中的应用程序访问 Azure Key Vault 存储的机密

    我在大多数文章中读到 需要在 Azure 中部署应用程序 以便应用程序能够以编程方式访问存储在 Azure Key Vault 中的机密 有没有办法不在 azure 中部署应用程序 但仍然能够使用客户端 ID 和客户端密钥或证书访问 Azu
  • iOS 应用程序设置包

    在项目中使用Apple的设置捆绑包 是否可以仅在满足另一个设置条件时才向用户公开某些设置 例如 我有一个切换开关 如果用户在 设置 应用程序中将选择切换为 False 我想显示一个他们可以填写的文本框 如果切换为 true 我想隐藏该文本框
  • iOS 9.3 调用 openURL 后冻结

    我的应用程序在调用后冻结openURL在 iOS 9 3 上构建 13E233 和 13E234 我尝试使用dispatch after但这并不能解决问题 这是代码 没什么特别的 void someMethod UIView senderV
  • 在 cloud init runcmd 中使用管道失败

    如何使用管道来重定向命令的输出runcmd我的云初始化脚本的一部分 以下失败 runcmd curl sk https example com packages current install bash bin bash s agent c
  • 如何使用Java获取客户端的LAN IP?

    如何使用 Java 获取计算机的 LAN IP 地址 我想要连接到路由器和网络其余部分的 IP 地址 我尝试过这样的事情 Socket s new Socket www google com 80 String ip s getLocalA
  • Scrapy延迟请求

    每次我运行我的代码时 我的IP都会被禁止 我需要帮助将每个请求延迟 10 秒 我尝试将 DOWNLOAD DELAY 放入代码中 但没有给出任何结果 任何帮助表示赞赏 item class included here class DmozI
  • 在 Bash 中提取子字符串

    给定表格中的文件名someletters 12345 moreleters ext 我想提取5位数字并将它们放入一个变量中 因此 为了强调这一点 我有一个包含 x 个字符的文件名 然后是一个五位数字序列 两侧各有一个下划线 然后是另一组 x