我有一个包含大量数据的文件,如下所示:
______________________________________________________________________
. 1-9/16 TCS DRILL
. CUT = +2.685 / O/A = -2.685
. +2.685 / -2.685
. +3.935 / -3.935
______________________________________________________________________
. 1-11/32 TCS DRILL
. CUT = +0.9 / O/A = -3.237
. +0.9 / -3.237
. +0.9 / -4.487
___________________________________________________________________
. 1-11/32 TCS DRILL
. CUT = +5.699 / O/A = -5.699
__________________________________________________________________
. 1-1/8 TCS DRILL
. CUT = +1.553 / O/A = -1.553
. +2.338 / -2.338
. +2.513 / -2.513
我需要做的是在每个“_______”之后抓住第一行文字(下划线),
1-9 / 16 TCS DRILL
1-11 / 32 TCS DRILL
1-11 / 32 TCS DRILL
.....
如何在powershell中指定模式以使用get-content或get-childitem匹配LINE?
我可以用来匹配没有任何字符“=”,“+”,“ - ”的行,但这种模式不准确且不起作用......
$file = 'C:\test\001.txt'
Get-Childitem $file | select-string -pattern '=','+','-' -notmatch
答案 0 :(得分:1)
我会尝试使用您的示例数据(在文本文件$file
中)
(Get-Content -Raw $file) -split "_+" |
Where-Object{$_} |
ForEach-Object{$_ -split "`r`n" | Select -Index 2}
只需使用-Raw
一次读取整个文件,然后-split
下划线组中的文件。使用Where-Object
过滤掉空条目,因为文件开头会有一个条目。
对于从该过程中获得的每个块,我们将其拆分为换行符。由于前两行是空格,我们使用-Index
来获取包含您要查找的内容的第一行数据。
示例输出
. 1-9/16 TCS DRILL
. 1-11/32 TCS DRILL
. 1-11/32 TCS DRILL
. 1-1/8 TCS DRILL
要删除前导句点和后续空格,我们可以对循环进行小的更新
ForEach-Object{($_ -split "`r`n" | Select -Index 2) -replace "^\.\s+"}
答案 1 :(得分:0)
您粘贴它的方式,至少线条是下划线_
,而不是连字符-
。尝试将'_'
添加到不匹配的列表