2017-10-28 3 views
0
hashrate=${line//*:/} 
hashrate=${hashrate//H\/s/} 

が、私はこの正規表現は、単一のコマンドに置き換える統一しようとしている、何かのようには:バッシュのパターンマッチング「または」を使用して、シェルパラメータ展開

hashrate=${line//*:\+/H\/s/} 

しかし、この最後のオプションは動作しません。私も\|で試してみましたが、うまく動作していないと思いますし、bashのマニュアルやドキュメントには何も役立ちません。私は${} sedの代わりに使用する必要がありますが、それを使用しても私の問題を解決します。拡張グロブを想定シェルパターン(shopt -s extglobための交替が有効になっている

hashrate="${line//*(*:|H\/s)/}" 
+2

これらは*正規表現ではなく、グロブパターンです。 –

+0

あなたは正しいです、彼らはかなり似ているので、私は混乱した、ありがとう。 – aegroto

答えて

1

あなたは(shopt介しextglobextended globbingを有効にする場合は、ゼロ以上グロブパターンに一致するように*(pattern1|pattern2|...)演算子を使用することができ)は、@(pattern|pattern...)です。あなたのケースのために:あなたはそれを置き換えるのではなく、パターンを削除する場合

${line//@(*:|H\/s)} 

末尾/はオプションです。

二重スラッシュのため、//は、パターンのすべての出現が一度に1つずつ削除されることに注意してください。 *(...)(randomirの回答を参照)を使用した場合、連続したパターンは一度にすべて削除されます。あなたが巨大な文字列を持っていない限り、違いはごくわずかです。 (もしあなたが巨大な文字列を持っていれば、とにかくこのようなものに最適化されていないので、とにかくglobbingを使いたくないでしょう)

+0

これは完璧に動作します、ありがとう! – aegroto

+0

あなたは大歓迎です!喜んで助けてください。 – randomir

1

+0

この説明をお寄せいただき、ありがとうございます。 – aegroto

関連する問題