Мне нужно извлечь третий столбец строки, возвращаемой после сопоставления с шаблоном. Он также должен быть однострочным
Файл содержит такие данные:
f5834eab44ff bfd0bc8498d8 1557718920
dc8087c38a0d a72e89879030 1557691221
e6d7aaf6d76b caf6cd0ef68c 1557543565
Прямо сейчас он соответствует шаблону и возвращает строку. Но я не могу разбить его на пробелы, чтобы получить третий столбец (индекс 2).
select-string -Path $hashlistfile -Pattern 'dc8087c38a0d') | $_.Split(" ") | $_[2]
Вывод должен быть:
1557691221
Вы можете получить свойство Line
из выходного объекта, созданного Select-String
, разделить его, а затем проиндексировать непосредственно в результате String.Split()
:
Select-String -Path $hashlistfile -Pattern dc8087c38a0d |ForEach-Object {
$_.Line.Split(" ")[2]
}
Вы можете использовать '$_' только внутри командлетов, у которых есть параметр блокировки скрипта '{ }'. Select-string возвращает объекты MatchInfo.
(select-string dc8087c38a0d $hashlistfile).gettype()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True False MatchInfo System.Object
Оператор -split, кажется, справляется с этим проще. В вашем примере после шаблона есть дополнительная скобка ')'.
select-string dc8087c38a0d $hashlistfile | foreach { -split $_ | select -index 2 }
1557691221
@elcool Тебе тоже не хватало
ForEach-Object
.... | $_.Split()
неверный синтаксис.