Имеется переключатель /R
, который позволяет указать регулярное выражение для сопоставления, но я не уверен, какая версия Windows / findstr
была добавлена.
Для сопоставления строк, которые начать с Data:
вы можете использовать что-то вроде этого ...
findstr /R "^Data:" data.txt
Это разбивается следующим образом:
^
- начало строки (в случае Data:
может появиться где-нибудь еще в строке) Data:
- Дословный текст Data:
Возвращает всю строку, включая префикс Data:
. Чтобы убрать префикс, можно использовать выражение вроде этого ...
(?<=^Data:).*
..., но, очевидно, findstr
не поддерживает (?<=)
положительное утверждение за кадром. PowerShell выполняет , который можно использовать, вставив и выполнив следующее в приглашении PowerShell ...
Select-String -Pattern '(?<=^Data:\s+).*' -Path 'data.txt' `
| ForEach-Object -Process { $_.Matches[0].Value } `
| Set-Content -Path 'done.txt' -Encoding 'UTF8'
Как только вы получите PowerShell, найдите строки, начинающиеся с Data:
не , что сложно для того, чтобы требовать регулярных выражений, чтобы вы могли потенциально повысить производительность, найдя строки и , извлекая текст вручную .. .
Get-Content -Path 'data.txt' `
| Where-Object { $_ -like 'Data:*' } `
| ForEach-Object -Process {
# Find the index of the first non-whitespace character after "Data:"
# This avoids allocating another [String] with $_.TrimStart() or $_.Trim()
for ($startIndex = 5; [Char]::IsWhiteSpace($_[$startIndex]); $startIndex++)
{
# Incrementing $startIndex is the job of this loop, so no body necessary
}
return $_.Substring($startIndex)
} | Set-Content -Path 'done.txt' -Encoding 'UTF8'