我有一个AWK脚本,我正在尝试检查进入它的行是否有(
但是只有在//
之前或没有//
(其中C代码,所以基本上看是否在评论之前发生了某些事情。)
现在我有
if (match($0,/(\()/))
do stuff
这与括号完全匹配,但我似乎无法在双反斜杠之前停止它。我四处寻找答案并尝试了一些事情,但我显然做错了。
在我发现的(\()
建议之后添加以下内容但似乎不起作用:(?:\/\/)
或(?=\/\/)
。
大约一年半前我对正则表达式有很好的处理,但从那时起我就没有触及它,并且变得非常生疏。所以,如果有一个好的网站不会在基础知识上花费很长时间,但是对大多数事情做了很好的描述也会有所帮助(找到一些教程,但没有一个是超级有用的)。
编辑:因此示例输入将是
#define aa (aad|dadfa|adsfas) // This line does a thing
#define bb //This line does a thing (but a different thing)
#define cc (cccc cccc cccc)
我想拉
aad|dadfa|adsfas
从第一行,第二行没有任何内容,
cccc cccc cccc
来自第三行。
重要提示:如我所见,我刚刚注意到我想要提取的某些行没有任何评论,因此需要在(
和//
之前匹配(
在没有//
的行上。
edit2:对不起,我有点跳到了示例输出的第二步。从该示例输入我真的只需要获得第1行和第3行的true以及第2行的false。我有代码然后将从括号之间提取文本。所以给出的样本输出是我正在寻找的最终输出,但是我遇到问题的部分是选择要使用的行。
答案 0 :(得分:0)
这就是你想要的:
$ awk '{sub(/\/\/.*/,"")} match($0,/\([^)]+\)/){ print substr($0,RSTART+1,RLENGTH-2) }' file
aad|dadfa|adsfas
cccc cccc cccc
它只删除该行中的任何注释,然后在parens之间提取任何文本。
如果没有,请再次尝试澄清您的要求并提供更具代表性的输入/输出。
答案 1 :(得分:-1)
regex = .*\(.*\/\/.*
在这里测试:
获得与a匹配的完整行(某处后跟//注释,
.*
获得了第一行的开头
(
必须匹配,然后是
.*
其余部分直至中
\/\/
评论指标,后跟
.*
评论文本