21

次の grep クエリを使用して、VB ソース ファイル内の関数の出現箇所を見つけます。

    grep -nri "^\s*\(public\|private\|protected\)\s*\(sub\|function\)" formName.frm

これは一致します -

    Private Sub Form_Unload(Cancel As Integer)
    Private Sub lbSelect_Click()
    ...

ただし、次のような機能を見逃しています-

   Private Static Sub SaveCustomer()

そこに「静的」という追加の単語があるためです。grepクエリでこの「オプションの」単語をどのように説明するのですか?

4

2 に答える 2

25

を使用し\?て、何かをオプションにすることができます。

grep -nri "^\s*\(public\|private\|protected\)\s*\(static\)\?\s*\(sub\|function\)" formName.frm

この場合、文字列「static」を含む前のグループはオプションです(つまり、0回または1回発生する可能性があります)。

于 2012-04-13T14:07:46.067 に答える
10

grep を使用する場合、カーディナリティは次のようになります。

* : 0 or many
+ : 1 or many
? : 0 or 1 <--- this is what you need.

次の例を考えると(まさに単語があなたのstaticを表す):

I am well
I was well
You are well
You were well
I am very well
He is well
He was well
She is well
She was well
She was very well

私たちが望むだけなら

I am well
I was well
You are well
You were well
I am very well

「?」を使用します。(また、'very' の後にスペースを慎重に配置して、'very' という単語を 0 回または 1 回使用する必要があることに注意してください。

egrep "(I|You) (am|was|are|were) (very )?well" file.txt

ご想像のとおり、 grepの代わりにegrepを使用することをお勧めします(拡張正規表現のgrep -Eを試すことができます)。

于 2012-04-13T14:21:10.907 に答える