PowerShell正则表达式多行

djsnakz

与Regex合作,遇到了麻烦。

$AddressEdit = Select-String "c:\utilities\AddressStaged.txt" -pattern "^(?!<img src)"  | Select Line | Out-File "c:\utilities\Address.txt" 

上面返回了我需要的一些数据。但是,文本文件中有一行总是在返回该行之后立即出现,我也希望将其包含在新文档中。

我的问题:正则表达式是否有办法说“抓住这条线以及从模式结果中找到的那条数据的正下方”?

联合会

是的,您可以使用-Raw param of将RegEx与多行匹配一起使用Get-Content

对于技术可行性,我给出此答案,从操作角度来看,您应该遵循@TheMadTechnician或@David Brabant的建议。

这是一个XML文件(M.txt):

<?xml version="1.0" encoding="utf-8"?>
<Machines xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Machine>
    <Nom>JPBHPP2.marceau.fr</Nom>
    <IP>192.168.2.61</IP>
    <Creation>2014-06-05T06:35:25.2318584+02:00</Creation>
    <Masque-IPv4>255.255.255.0</Masque-IPv4>
  </Machine>
  <Machine>
    <Nom>JPBASUSF2.marceau.fr</Nom>
    <IP>192.168.2.81</IP>
    <Creation>2014-06-05T06:35:20.7676768+02:00</Creation>
    <Masque-IPv4>255.255.255.0</Masque-IPv4>
  </Machine>
</Machines>

现在将文件作为单个字符串加载:

$a = Get-Content D:\temp\M1.xml -Raw

然后尝试此RegEx:

$reg = [regex]'(?sm)  (<Nom>.*?</Nom>\r\n.*?\r\n)'

它给 :

$reg.Matches($a).count # gives 2
$reg.Matches($a).Groups[0].value
# gives 
#  <Nom>JPBHPP2.marceau.fr</Nom>
#    <IP>192.168.2.61</IP>

已更新为回答您的问题:是否可以以正则表达式开始并以正则表达式结束并收集所有内容?这是一种在<Nom>之间取整的方法</IP>

$reg = [regex]'(?sm)(<Nom>.*?</IP>)'

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章