正则表达式删除整行包括行尾

时间:2016-12-01 10:00:57

标签: regex powershell

我想使用另一个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中成功匹配行尾?

1 个答案:

答案 0 :(得分:5)

您可以使用简单的-replace来过滤没有注释符号(Where-Object)的行,而不是使用#,正则表达式也非常简单,^#表示匹配该行开头的任何#字符,请参阅:http://www.regular-expressions.info/anchors.html

(Get-Content commented.ps1) | Where-Object {$_ -notmatch '^#'} | Set-Content uncommented.ps1