シェルで正規表現を使用する方法について2つの質問があります。
1. *の使用
~によると正規表現に関するウィキペディアページ:
*:アスタリスクは、前の要素が0個以上あることを示します。たとえば、ab * cは「ac」、「abc」、「abbc」、「abbbc」などと一致します。
ところで を作成すると、rm test*.iso
"test"と".iso"の間にあるかどうかに関係なく"test"で始まり".iso"で終わるすべてのファイルが削除されます。したがって、「tes.iso」ファイルは次のようになります。いいえ削除されました。
Wikipediaによると、abcを例にとると、「ab * c」は「ac」と一致します。したがって、rm ab*c
「ac」ファイルを削除する必要があります。Wikipediaで説明されているように、rmが正規表現を使用しないのはなぜですか?
2. - と ? を使用します。
まだベースに正規表現に関するウィキペディアページ:
?: 疑問符は、前に要素が 0 個または 1 個あることを示します。たとえば、color?rは「color」と「color」と一致します。
+:プラス記号は、前に1つ以上の要素があることを示します。たとえば、ab + cは「abc」、「abc」、「abbbc」などと一致しますが、「ac」は一致しません。
「?」は「*」のように見えます。これは「?」シンボルが1つまたは0つの要素を置き換えるという意味です(ただし、Wikipediaの説明とは異なり、前の要素は置き換えられません)。
「+」をどのように使用するのかわかりません。 2番目の質問です。また、正規表現とrm, cp, ...
。
答え1
シェルパターン一致記号で説明されているこの標準文書。
ドキュメントの紹介部分に示すように、パターンマッチング表記は正規表現の表記に関連していますが、少し異なります。
特に、?
シェルの動作は正規表現に似ています.
。 (しかし、それらのどれもファイル名の先頭のaと一致しません。)シェルには特別なパターン一致機能はありません。しかし、@HaukeLagingが彼の答えで述べたように、一部のシェルには正規表現の表記を有効にするオプションがありますが、そうするのは非標準です。*
.*
.
+
答え2
シェルは特定の条件(シェルによって異なる場合があります)でのみ正規表現を使用します。
bash
次のコマンドを使用して有効にする必要があります。shopt -s extglob
その後、次のようなものを使用できます。
echo a*(b)c
Pattern Matching
のブロックを参照してくださいman bash
。