0

次のようなステートメントのすべてのインスタンスを見つけようとしています

             ABCD.Transaction = GlobalCommArea 
      WXY.Transaction = GlobalCommArea 
         PQR.Transaction = LMN.Transaction
    DEF.XYZ(CStr(i)).Transaction = GlobalCommArea

私が避けたい唯一のことは、これらのステートメントの前に一重引用符が存在することです。

だから、例えば。

      ' PQR.Transaction = GlobalCommArea  

無効になりますが、

       WXY.Transaction = GlobalCommArea ' 2012  

引用符は行の一致する部分の後に来るため、有効です

一重引用符の問題が存在しない場合、次のように単純な正規表現を書くことができます-

      grep -nr  "\.Transaction" .

一致の前に行のどこにも一重引用符がないことを保証できる正規表現を作成する方法は?

4

2 に答える 2

1
grep -nrE "^[^']+\.Transaction"
于 2012-04-20T15:39:47.093 に答える
0

どのフレーバーの grep を使用しているかはわかりませんが、GNU grep 2.9 (私の Ubuntu ボックス上) はこれを行います (-Pスイッチは PCRE をオンにするため、先読みが機能します)。

grep -P "^(?! *').+Transaction.+$" file_to_search.txt

説明:

^              # start at beginning of line
(?! *')        # negative lookahead for optional space and a single quote
.+Transaction  # one or more characters up to 'Transaction'
.+$            # all remaining character up to end of line

編集:cygwinで動作していることを示しています

$ uname -r        
1.7.11(0.260/5/3)   # cygwin ver. 1.7.11

$ grep --version
GNU grep 2.6.3

$ cat foo.txt       # contents of the file I'm grepping
  ABCD.Transaction = ' GlobalCommArea
'   WXY.Transaction = GlobalCommArea
  PQR.Transaction = LMN.Transaction
     '  DEF.XYZ(CStr(i)).Transaction = GlobalCommArea

$ grep -P "^(?! *').+Transaction.+$" foo.txt
ABCD.Transaction = ' GlobalCommArea
PQR.Transaction = LMN.Transaction
于 2012-04-20T15:32:42.323 に答える