2016-11-04 2 views
0

Я пытаюсь написать сценарий powershell для поиска шаблона в текстовом файле. В частности, я смотрю на чтение файла по строкам и возвращает любую строку с пробелом в 32-й позиции символа.Использование powershell для поиска шаблона

У меня есть это до сих пор, но он просто возвращает все строки, которые имеют пробел. Мне нужно сузить его до 32-й позиции

Get-Content -path C: \ VM_names.txt | Где-Объект {$ _ -match "\ s +"}

ответ

1

Используйте этот шаблон:

-match '^.{31} ' 

Объяснение:

^ - beginning of the string 
. - any character 
{31} - repeated 31 times 
    - a space 
+0

Высокий. Это работает как шарм. спасибо за помощь! –

1

Это действительно очень легко сделать. По умолчанию Get-Content читает текстовый файл как массив строк (отдельные строки), если вы не используете параметр -Raw, который читает его как одну строку. Вы можете использовать оператор PowerShell -match для «соответствия» линиям, которые соответствуют вашему регулярному выражению.

(Get-Content -Path c:\VM_names.txt) -match '^.{31}\s' 

Результат указанной выше команды - это массив строк, соответствующих требуемому регулярному выражению.

ПРИМЕЧАНИЕ: Вызов Get-Content должен быть заключен в скобки, иначе PowerShell анализатор будет думать, что -match является параметром в этой команде.

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

Смежные вопросы