我想使用另一个PowerShell脚本删除powershell脚本中的所有注释行。我希望这很容易,但显然不是。这是我尝试过的东西,显然没有用:
(Get-Content commented.ps1) -replace '^#.*$', '' | Set-Content uncommented.ps1
(Get-Content commented.ps1) -replace '#.*$', '' | Set-Content uncommented.ps1
这些都有效,但行尾仍然存在,所以现在我有一些空行而不是注释,这不是我想要的。
(Get-Content commented.ps1) -replace '#.*\r\n', '' | Set-Content uncommented.ps1
(Get-Content commented.ps1) -replace '^#.*\r\n$', '' | Set-Content uncommented.ps1
(Get-Content commented.ps1) -replace '#.*\r\n$', '' | Set-Content uncommented.ps1
我还尝试只编写\n
,即使我确定我的文件是CRLF。我还尝试将\n
或\r\n
放在开头。这些根本不起作用,但它们也没有错误。
测试文件:
评论.ps1:
#This is a comment
$var = 'this is a variable'
# This is another comment
$var2 = 'this is another variable'
预期uncommented.ps1:
$var = 'this is a variable'
$var2 = 'this is another variable'
我根本不知道为什么\r\n
与行尾没有匹配。任何帮助都非常感谢。我猜问题是:
如何使用Get-Content -replace
在powershell中成功匹配行尾?
答案 0 :(得分:5)
您可以使用简单的-replace
来过滤没有注释符号(Where-Object
)的行,而不是使用#
,正则表达式也非常简单,^#
表示匹配该行开头的任何#
字符,请参阅:http://www.regular-expressions.info/anchors.html
(Get-Content commented.ps1) | Where-Object {$_ -notmatch '^#'} | Set-Content uncommented.ps1