1. ホーム
  2. regex

[解決済み】Bashで正規表現で文字列をマッチさせるには?

2022-04-11 07:41:26

質問

私は、ある関数を含むbashスクリプトを書こうとしています。 .tar , .tar.bz2 , .tar.gz などのファイルでは、tarに関連するスイッチを入れて解凍します。

私は、ファイル名が何で終わるかをテストする if elif then ステートメントを使用していますが、正規表現のメタキャラクタを使用して一致させることができません。

スクリプトを何度も書き直さずに済むように、コマンドラインで「test」を使用しています。以下のステートメントが機能するはずです。

test sed-4.2.2.tar.bz2 = tar\.bz2$; echo $?
(this returns 1, false)

この問題は簡単なことだと思うし、あらゆるところを探したのですが、どうすればいいのかわかりません。 どうすればいいのか、どなたかご存知ですか?

解決方法を教えてください。

正規表現にマッチさせるために =~ 演算子を使用します。

これを試してみてください。

[[ sed-4.2.2.tar.bz2 =~ tar.bz2$ ]] && echo matched

また、(正規表現ではなく)ワイルドカードを使って == 演算子を使用します。

[[ sed-4.2.2.tar.bz2 == *tar.bz2 ]] && echo matched

移植性にこだわらないのであれば、以下のような使い方をお勧めします。 [[ の代わりに [ または test の方がより安全で強力です。参照 testと[]と[[]の違いは何ですか? をご覧ください。