hashrate=${line//*:/}
hashrate=${hashrate//H\/s/}
我正在尝试将此正则表达式替换统一为一个命令,例如:
hashrate=${line//*:\+/H\/s/}
但是,最后一个选项不起作用。我也尝试过\|
,但它似乎不起作用,而且我在 bash 手册和文档中没有发现任何有用的东西。我需要使用${}
而不是 sed,即使使用它可以解决我的问题。
hashrate=${line//*:/}
hashrate=${hashrate//H\/s/}
我正在尝试将此正则表达式替换统一为一个命令,例如:
hashrate=${line//*:\+/H\/s/}
但是,最后一个选项不起作用。我也尝试过\|
,但它似乎不起作用,而且我在 bash 手册和文档中没有发现任何有用的东西。我需要使用${}
而不是 sed,即使使用它可以解决我的问题。
如果启用扩展通配符( extglob
via shopt
),则可以使用*(pattern1|pattern2|...)
运算符匹配零个或多个glob模式:
hashrate="${line//*(*:|H\/s)/}"
shell 模式的交替(假设shopt -s extglob
启用扩展通配符)是@(pattern|pattern...)
. 对于您的情况:
${line//@(*:|H\/s)}
/
如果您只是删除模式而不是替换它,则尾随是可选的。
请注意,由于双斜杠 ,//
将删除所有出现的模式,一次一个。如果您使用*(...)
(请参阅 randomir 的答案),连续模式将一次性全部删除。除非你有巨大的字符串,否则差异应该可以忽略不计。(如果你有巨大的字符串,你无论如何都不想使用 globbing,因为它没有针对这种事情进行优化。)