首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Bash模式匹配“或”使用shell参数展开

Bash模式匹配“或”使用shell参数展开
EN

Stack Overflow用户
提问于 2017-10-28 20:23:32
回答 2查看 444关注 0票数 0
代码语言:javascript
复制
hashrate=${line//*:/}
hashrate=${hashrate//H\/s/}

我试图将这个regex替换统一到一个命令中,如下所示:

代码语言:javascript
复制
hashrate=${line//*:\+/H\/s/}

然而,最后一个选项不起作用。我也尝试过使用\|,但是它似乎不起作用,而且我在bash手册和文档中也没有发现任何有用的东西。我需要使用${}而不是sed,即使使用它解决了我的问题。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-10-28 20:39:01

如果启用扩展球状 (extglob to shopt),则可以使用*(pattern1|pattern2|...)运算符匹配零或多个glob模式:

代码语言:javascript
复制
hashrate="${line//*(*:|H\/s)/}"
票数 1
EN

Stack Overflow用户

发布于 2017-10-28 20:39:10

shell模式的替换(假设已启用扩展全局( shopt -s extglob ))是@(pattern|pattern...)。就你的情况而言:

代码语言:javascript
复制
${line//@(*:|H\/s)}

如果只是删除一个模式而不是替换它,那么尾随的/是可选的。

请注意,由于双斜杠//,所有出现的模式将被删除,一次一个。如果您使用*(...) (请参阅随机的答案),那么连续的模式将在一次执行中全部删除。除非你有很大的绳子,否则差别应该可以忽略不计。(如果您有巨大的字符串,那么无论如何您都不想使用globbing,因为它没有针对这类事情进行优化。)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46994121

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档