3

我试图通过许多旧的 PowerBASIC 源文件搜索变量,但我无法grep避免在行尾注释中匹配对变量的引用。

例如:

ANGLE = 40    ' THIS IS A COMMENT ABOUT ANGLE'S VALUE
FOO = 3/ANGLE ' ANGLE CAN APPEAR ON RIGHT SIDE AS WELL
DELTA = 35    ' ANGLE AND DELTA AREN'T FRIENDS

最初我使用的是:

# grep "\bANGLE\b.*'" SRC_FILE.BAS

但是——除了忽略没有注释的行——它还会打印出根本不使用的代码行ANGLE(例如DELTA行)。这是因为这些行的注释(即 )中恰好也有一个号()。'AREN'T

我想通过管道输出来删除我不想要的行:

# grep "\bANGLE\b" SRC_FILE.BAS | grep -v "'.*\bANGLE\b"

但不幸的是,它也删除了我希望恰好ANGLE在他们的评论中有“”的代码行。

如何让 grep 匹配涉及的实际代码ANGLE行并忽略那些在注释中匹配的行?

4

2 回答 2

2

您可以先删除评论:

sed "s/'.*$//" SRC_FILE.BAS | grep '\bANGLE\b'

在某些情况下,如果字符串包含单词 ANGLE 或单引号,这仍然会失败。要准确解决这个问题,您需要编写解析器而不是使用正则表达式。

于 2013-05-23T16:25:46.040 回答
2
grep "^[^']*\bANGLE\b" SRC_FILE.BAS

这仅匹配左侧所有内容ANGLE不包括的行'。如果字符串中有撇号,则会出现类似于jnylen 的解决方案的问题。

于 2013-05-23T16:27:08.757 回答