0

我正在尝试在文件中查找特定行。当我使用 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

4 回答 4

0

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

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

如果您不习惯 POSH 中的 RegEx(或根本不习惯),这是进入这种解决方案的一个相当不错的起点。

于 2013-10-31T17:19:30.673 回答
0

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

$regex = '.+USERINTERACTION: (.+) from type <1> occured'
(get-content file.txt) -match $regex -replace $regex,'$1'
于 2013-10-31T12:52:26.290 回答
0

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

于 2013-10-31T12:53:08.487 回答
0

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

Select-String 'USERINTERACTION:\s*(.*?occured)' file.txt | Foreach {$_.matches.groups[1].value}
于 2013-10-31T12:44:58.180 回答