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 回答