使用PowerShell从行获取特定部分

时间:2013-10-31 12:41:00

标签: powershell

我想在文件中找到特定的行。当我使用Select-String获得匹配时,我不想要整行,我只想要一行中的一个特定部分(错误部分)。

我可以使用参数来执行此操作吗?

例如:

如果我做了

select-string USERINTERACTION file.txt

并且文件包含一行:

MainControlInterleaf-D: 21:59:14:631: myErrorShowTracer (300) -> Info::   USERINTERACTION: <this is the error part> from type <1> occured

我想得到一个结果,而不是返回整行。


修改 还有一件事我忘记了:如果这些行之间存在差异,我需要在代码中进行哪些更改?

例如:

log-29-10-2013_00-11-52.txt:2737:MainControlInterleaf-D: 02:50:50:097: myErrorShowTracer (300) -> Info:: USERINTERACTION: <this is the error1> from type <1> occured
log-29-10-2013_00-11-52.txt:2732:MainControlInterleaf-D: 02:50:39:933: myErrorQuitTracer (350) -> Info:: USERINTERACTION <this is the error2<br> OK ... try again.<br>

4 个答案:

答案 0 :(得分:0)

Select-String输出一个MatchInfo对象,你想使用这样的东西:

Select-String 'USERINTERACTION:\s*(.*?occured)' file.txt | Foreach {$_.matches.groups[1].value}

答案 1 :(得分:0)

除非file.txt是一个非常大的文件,否则这应该有效:'

$regex = '.+USERINTERACTION: (.+) from type <1> occured'
(get-content file.txt) -match $regex -replace $regex,'$1'

答案 2 :(得分:0)

怎么样      Select-String -Pattern foo -Path X:\ myfile.txt

答案 3 :(得分:0)

您尝试返回特定结果,但不为脚本提供特定条件。

尝试RegEx匹配(请记住,您可以在RegEx中使用管道来形成逻辑OR门并以这种方式处理不同的模式。)

Here's a fairly decent starting point for getting into this kind of solution,如果您不熟悉POSH中的RegEx(或者根本不习惯)。