我有一个包含数据行的文本文件.我可以使用以下的powershell脚本来提取我感兴趣的行:
select-string -path *.txt -pattern "subject=([A-Z\.]+),"
一些示例数据将是:
blah blah subject=THIS.IS.TEST.DATA, blah blah blah
我想要的是能够只提取主题的实际内容(即"THIS.IS.TEST.DATA"字符串).我试过这个:
select-string -path *.txt -pattern "subject=([A-Z\.]+)," | %{ $_.Matches[0] }
但"匹配"属性始终为空.我究竟做错了什么?
我不知道为什么你的版本不起作用.它应该工作.这是一个有用的丑陋版本.
$p = "subject=([A-Z\.]+)," select-string -path *.txt -pattern $p | % {$_ -match $p > $null; $matches[1]}
编辑.dant的解释:
-match
是正则表达式匹配运算符:
>"foobar" -match "oo.ar" True
在> $null
刚刚抑制真正被写入到输出.(尝试删除它.)有一个cmdlet执行同样的事情,我现在不记得这个名字.
$matches
是一个魔术变量,它保存最后一次-match
操作的结果.
在PowerShell V2 CTP3中,实现了Matches属性。因此,以下将起作用:
select-string -path *.txt -pattern "subject=([A-Z\.]+)," | %{ $_.Matches[0].Groups[1].Value }