hashrate=${line//*:/}
hashrate=${hashrate//H\/s/}
我試圖統一這個表達式替換成一個單一的指令,這樣的:猛砸模式匹配「或」使用shell參數擴展
hashrate=${line//*:\+/H\/s/}
然而,這最後一個選項是行不通的。我也試過\|
,但它似乎沒有工作,我還沒有發現任何有用的bash手冊和文檔。我需要使用${}
而不是sed,即使使用它也能解決我的問題。
hashrate=${line//*:/}
hashrate=${hashrate//H\/s/}
我試圖統一這個表達式替換成一個單一的指令,這樣的:猛砸模式匹配「或」使用shell參數擴展
hashrate=${line//*:\+/H\/s/}
然而,這最後一個選項是行不通的。我也試過\|
,但它似乎沒有工作,我還沒有發現任何有用的bash手冊和文檔。我需要使用${}
而不是sed,即使使用它也能解決我的問題。
如果啓用(通過shopt
extglob
)extended globbing,可以使用*(pattern1|pattern2|...)
運算符來匹配零種或多個水珠型態:
hashrate="${line//*(*:|H\/s)/}"
對於外殼的圖案(假設擴展通配的交替,shopt -s extglob
啓用),是@(pattern|pattern...)
。對於您的情況:
${line//@(*:|H\/s)}
尾隨/
是可選的,如果你只是刪除的模式,而不是替換它。
請注意,由於雙斜線,//
,所有出現的模式將被刪除,一次一個。如果您使用*(...)
(請參閱randomir的答案),連續模式將一次性全部刪除。除非你有巨大的字符串,否則差異應該可以忽略不計。 (如果你有巨大的字符串,不管怎麼樣都不想使用通配符,因爲它沒有針對這種事情進行優化。)
感謝您的解釋,它使globbing更清晰。 – aegroto
重要的是要注意這些是* NOT *正則表達式,但是glob模式。 –
你是對的,他們非常相似,所以我感到困惑,謝謝。 – aegroto