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