我正在尝试通过大量旧的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
的实际代码行匹配,并在注释中忽略仅匹配的那些行?
答案 0 :(得分:2)
你可以先拿出评论:
sed "s/'.*$//" SRC_FILE.BAS | grep '\bANGLE\b'
如果字符串包含单词ANGLE或单引号,则在某些情况下仍会失败。要准确地解决这个问题,您需要编写一个解析器而不是使用正则表达式。
答案 1 :(得分:2)
grep "^[^']*\bANGLE\b" SRC_FILE.BAS
这仅匹配ANGLE
左侧的所有内容都不包含'
的行。如果字符串中有撇号,则会出现与jnylen's solution类似的问题。