Как я могу записать вывод Select-String в powershell без номеров строк? - PullRequest
0 голосов
/ 20 февраля 2020

Я использую PowerShell для фильтрации текстового файла с помощью регулярного выражения. Для этого я использую следующую команду: Select-String -Pattern "^[0-9]{2}[A-Z]{2}[a-z]{5}" -CaseSensitive rockyou.txt > filter.txt Проблема, однако, при записи их в filter.txt сопоставленным строкам предшествует имя исходного файла, за которым следуют номера строк, например:

rockyou .txt: 12345: abcdefg

rockyou.txt: 12345: abcdefg

rockyou.txt: 12345: abcdefg

Как сделать так, чтобы он пропускал номера строк

Ответы [ 2 ]

2 голосов
/ 20 февраля 2020

Select-String выводит объект на совпадение, и у каждого есть свойство Line, содержащее исходную строку, в которой произошло совпадение. Вы можете получить только значение Line, например:

... |Select-String ... |Select-Object -ExpandProperty Line |Out-File filter.txt
0 голосов
/ 20 февраля 2020

Этот способ, кажется, работает. Set-content сохраняет строковую версию объекта matchinfo без каких-либо лишних пустых строк, в отличие от out-file или ">".

get-content rockyou.txt | select-string '^[0-9]{2}[A-Z]{2}[a-z]{5}' -ca | 
  set-content filter.txt
get-content filter.txt

01ABcdefg

Мне пришло в голову, что вам все равно может понадобиться имя файла:

select-string '^[0-9]{2}[A-Z]{2}[a-z]{5}' rockyou.txt -ca | 
  % { $_.filename + ':' + $_.line } > filter.txt
cat filter.txt

rockyou.txt:01ABcdefg

...