【问题标题】:Powershell Script for spotting incorrect preprocessor directives用于发现不正确的预处理器指令的 Powershell 脚本
【发布时间】:2023-03-14 07:39:01
【问题描述】:

我需要检查我的项目文件中的每个“#define”,如果它的值在括号内。 例如:

#define A (50)
#define B (60)
#define C 70

我想找出所有包含错误格式#define 的文件,以便手动更正它。

我想通过运行一个小的 powershell 脚本来自动执行此任务,但我一直坚持执行它。这是我到目前为止写的:

GetChildItem -Recurse | Select-String "#define" /*some additional code*/ -List | Select Path

任何解决方案将不胜感激。

【问题讨论】:

  • 如果你正在寻找括号,你可以试试Select-String -Pattern '#define.*?\(.*?\)'。如果你不想要括号,你可以试试Select-String -Pattern '#define[^()]+$'。最好使匹配更细化,但我不知道您的所有模式可能性。

标签: windows powershell automation scripting powershell-ise


【解决方案1】:

类似:

... |Select-String '^#define(?!\s+[\w]+\s+\([^\)]+\)\s*$)'

...应该这样做。

正则表达式模式分解为:

^                   # start of line
 #define            # followed by literal string "#define"
 (?!                # negative look-ahead for
    \s+             # 1 or more whitespace chars
    [\w]+           # 1 or more words characters
    \s+             # 1 or more whitespace chars
    \([^\)]+\)      # literal "(" followed by 1 or more non-"(", and finally a literal ")"
    \s*             # trailing whitespace
    $               # end of string
 )                  # end negative look-ahead

换句话说,我们正在寻找符合以下条件的行:

  • 有一个#define 指令,
  • 不是格式正确

【讨论】:

猜你喜欢
  • 2017-06-26
  • 1970-01-01
  • 2011-04-15
  • 2021-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多