微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

powershell选择字符串列

如何解决powershell选择字符串列

| 我有一堆IIS日志和powershell 2.0。 目前,我正在使用以下命令来查找有关它们的一些信息(其中出现\'crossdomain \'):
dir -r -i *.log | select-string \"crossdomain\" | Select-Object | export-csv test.csv
然后,这给了我一些数据,如下所示:
TRUE    1132740 2011-06-09 11:13:49 W3SVC322653822 myserver-WEB1 1.1.1.1 GET /crossdomain.xml - 80 - 1.1.1.1 HTTP/1.1 Mozilla/4.0+(compatible;+MSIE+8.0;+Windows+NT+6.0;+Trident/4.0;+GTB6.5;+SLCC1;+.NET+CLR+2.0.50727;+Media+Center+PC+5.0;+.NET+CLR+3.5.30729;+.NET+CLR+3.0.30618) WT_FPC=id=82.40.25.58-3980883472.30062468:lv=1307614413232:ss=1307614405277;+__utma=151217894.932228880.1307618019.1307618019.1307618019.1;+__utmz=151217894.1307618019.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none);+myserverVISITOR=eyJzaVZpc2l0VHJhY2tpbmcxIjpbeyJWSVNJVERBVEUiOiJNYXksIDEzIDIwMTEgMDY6NTc6NTAiLCJTVEFOREFSRElURU1JRCI6NjQ0MTkzLjB9LHsiVklTSVREQVRFIjoiTWF5LCAxMyAyMDExIDE1OjU0OjMyIiwiU1RBTkRBUkRJVEVNSUQiOjYwMzc4OC4wfSx7IlZJU0lUREFURSI6Ik1heSwgMTUgMjAxmsAxMzo0MDoxNCIsIlNUQU5EQVJESVrftUlEIjo2NDQxOTUuMH0seyJWSVNJVERBVEUiOiJNYXksIDE1IDIwMTEgMTQ6MDE6NDEiLCJTVEFOREFSRElURU1JRCI6NjQ0MTkyLjB9LHsiVklTSVREQVRFIjoiTWF5LCAxNSAyMDExIDE0OjAzOjIyIiwiU1RBTkRBUkRJVEVNSUQiOjY0NDIxMC4wfSx7IlZJU0lUREFURSI6Ik1heSwgMTUgMjAxmsAxNDoyMTozMiIsIlNUQU5EQVJESVrftUlEIjo2NDQ2MjAuMH0seyJWSVNJVERBVEUiOiJNYXksIDIyIDIwMTEgMDk6MTM6NTIiLCJTVEFOREFSRElURU1JRCI6NjI5NzYyLjB9LHsiVklTSVREQVRFIjoiSnVuZSwgMDcgMjAxmsAxMTo1MjoxMiIsIlNUQU5EQVJESVrftUlEIjo2NDUxMjMuMH1dLCJ2aXNpdG9ySWQiOiI1QkFGNzg4NjNERDBENjQ3MUU4NkZENTYwQzU4NTFEMCJ9;+myserverGFSurvey=1;+ebNewBandWidth_.myserver.co.uk=251%3A1303383702897;+__utmb=151217894.1.10.1307618019;+__utmc=151217894 - myserver.co.uk 200 0 0 601 1506 0   W3SVC322653822_ex110609.log.log E:\\w3\\W3SVC322653822_ex110609.log.log   crossdomain     System.Text.RegularExpressions.Match[]
很好,很漂亮,但是不够漂亮。 我真正想做的是从文件中出现跨域的结尾处导出第7列。所以这部分在这里
**myserver.co.uk** 200 0 0 601 1506 0
(myserver.co.uk) 有什么提示吗? 干杯     

解决方法

        与Mjolinors的答案类似,但我会尝试使regexp尽可能简单。而且,由于您已经选择了带有“跨域”一词的行,因此您不必仅搜索以下内容:
Get-Content test.csv  | Foreach-Object
{
   if ($_ -match \'(\\w+\\.\\w+\\.\\w+ \\d+ \\d+ \\d+ \\d+ \\d+ \\d+)\')
   {
       $matches[1]
   }
}
您不会收到任何“意外令牌”错误,但是您可能需要调整正则表达式以获得所需的结果(我假设您正在寻找一个三点域名和六个数字,之后它)。 当您不需要变量外推时,请始终对字符串使用\'\'。更安全。     ,        
get-content  test.csv |
 foreach -object {
 $_ -match \".+\\s([a-z\\.]+)\\s[\\s\\d]+\\S+\\s\\S+\\s+crossdomain\\s+\\S+$\" > $nul
 $matches[1]
  }
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。