Поиск многострочного текста в файле с помощью powershell - PullRequest
0 голосов
/ 27 июня 2018

Я не эксперт в PowerShell. Я пытаюсь найти многострочную строку в файле, но не получаю желаемого результата.

Вот мой код:

$search_string = @("This is the first line`nThis is the second line`nThis is the third line")
$file_path = "log.txt"
$ret_string = @(Get-Content -Path $file_path | Where-Object{$_.Contains($search_string)}).Count
Write-Host $ret_string

$ret_string установлен на 0, хотя "log.txt" содержит точно такое же содержимое, как $search_string.

Ответы [ 2 ]

0 голосов
/ 27 июня 2018

Несколько проблем здесь:

  1. Вы ищете массив строк, а не строку, содержащую разрывы строк
  2. Если вы используете Windows, вам нужно использовать \r\n в качестве новой строки
  3. Функция .Contains вернет логическое значение, поэтому не поможет вам получить счетчик
  4. Ваш $search_string не обязательно должен быть массивом

Вы можете использовать параметр -Raw, чтобы получить все содержимое файла в виде строки. Вам также лучше использовать регулярное выражение для поиска здесь. Попробуйте:

$search_string = "This is the first line`r`nThis is the second line`r`nThis is the third line"
$file_path = "log.txt"
$ret_string = (Get-Content -raw -Path $file_path | Select-String $search_string -AllMatches | % { $_.matches}).count

Это вернет счетчик всех вхождений $search_string в файле

0 голосов
/ 27 июня 2018

Get-Content возвращает массив строк (по одной на строку), каждая из которых проверяется отдельно в вашем Where-Object условии. Вам нужно прочитать файл как одну строку, чтобы ваша проверка работала:

Get-Content $file_path | Out-String | Where-Object { ... }

В PowerShell v3 или новее командлет имеет параметр для чтения необработанного файла:

Get-Content $file_path -Raw | Where-Object { ... }

Обратите внимание, однако, что вам, возможно, придется скорректировать свое состояние для проверки на `r`n, а не просто `n, особенно при первом подходе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...