hashrate=${line//*:/}
hashrate=${hashrate//H\/s/}我试图将这个regex替换统一到一个命令中,如下所示:
hashrate=${line//*:\+/H\/s/}然而,最后一个选项不起作用。我也尝试过使用\|,但是它似乎不起作用,而且我在bash手册和文档中也没有发现任何有用的东西。我需要使用${}而不是sed,即使使用它解决了我的问题。
发布于 2017-10-28 20:39:01
如果启用扩展球状 (extglob to shopt),则可以使用*(pattern1|pattern2|...)运算符匹配零或多个glob模式:
hashrate="${line//*(*:|H\/s)/}"发布于 2017-10-28 20:39:10
shell模式的替换(假设已启用扩展全局( shopt -s extglob ))是@(pattern|pattern...)。就你的情况而言:
${line//@(*:|H\/s)}如果只是删除一个模式而不是替换它,那么尾随的/是可选的。
请注意,由于双斜杠//,所有出现的模式将被删除,一次一个。如果您使用*(...) (请参阅随机的答案),那么连续的模式将在一次执行中全部删除。除非你有很大的绳子,否则差别应该可以忽略不计。(如果您有巨大的字符串,那么无论如何您都不想使用globbing,因为它没有针对这类事情进行优化。)
https://stackoverflow.com/questions/46994121
复制相似问题