Лучший отвечающий
Проблемы с пробелами при разборе текста PowerShell

Вопрос
-
Добрый день!
Не могу понять в чем дело и в чем разница. Есть файл со строками вида:
enable functionality group = 1 [REQ]
enable inline default sharing = 1 [REQ]и так далее.
Я делаю так:
$s = Get-Content $file
$s[0] -match "=.+\s";$Matches[0]
он говорит мне False, однако если взять содержимое 0-ого элемента скопировать и выполнить тоже самое то уже True результат
"enable functionality group = 1 [REQ]" -match "=.+\s";$Matches
Но по сути ищу я совпадение в одной и той же строке, почему в первом случае не работает?
29 апреля 2013 г. 10:01
Ответы
-
Опять не работает, какая то мистика....
PS C:\Users\SteFFun> $s[0] -match "=.+\s";$Matches[0]
True
= 1 [REQ]или я что то не то делаю, мне нужно получить все знаки после "=" до следующего пробела.
В конце есть дополнительный пробел, поэтому и проблемы:
$s[0].Trim() -match "=.+\s";$Matches
Или подправить regex:
-match "=.+\b\s" (Будет = 1)
-match "= (.+)\b\s";$Matches[1] (Будет просто 1)
- Помечено в качестве ответа SteFFun 29 апреля 2013 г. 11:39
- Изменено KazunEditor 29 апреля 2013 г. 11:39
29 апреля 2013 г. 11:15Отвечающий -
Похоже у меня заглючил PowerShell, перезапустил все нормально стало. У меня он 2 недели не выключался и я в нем постоянно что то делал,там уже куча переменных и всего было, может из-за этого. За помощь спасибо, тему придется удалить)
- Помечено в качестве ответа KazunEditor 29 апреля 2013 г. 11:09
29 апреля 2013 г. 11:02
Все ответы
-
Видимо в файле отсутствует пробел между =:
PS Z:\> $s = Get-Content 1.txt PS Z:\> $s[0] enable functionality group = 1 [REQ] PS Z:\> $s[0] -match "=.+\s";$Matches[0] True = 1 [REQ]
29 апреля 2013 г. 10:17Отвечающий -
А что тогда там вместо пробелов и выглядит как пробелы и почему при копировании он там появляется?
Ради интереса сделал вот так:
$s[0] -replace "\s+"
enablefunctionalitygroup=1[REQ]четко удалил все пробелы, в том числе и этот "пробел", значит понимает он его правильно и это пробел...
- Изменено SteFFun 29 апреля 2013 г. 10:28
29 апреля 2013 г. 10:24 -
А что тогда там вместо пробелов и выглядит как пробелы и почему при копировании он там появляется?
Приложите файл, посмотрим.29 апреля 2013 г. 10:26Отвечающий -
http://files.mail.ru/6DA6A8BC6BC34F87ABE89C94358A5846
прошу
29 апреля 2013 г. 10:41 -
Проблем нет:
PS Z:\> gc D:\param.txt | select -f 5 enable functionality group = 1 [REQ] enable inline default sharing = 1 [REQ] enable permissive unicode = 1 [REQ] quoted identifier enhancements = 1 [REQ] select for update = 1 [REQ] PS Z:\> $s=gc D:\param.txt PS Z:\> $s[0] -match "=.+\s";$Matches[0] True = 1 [REQ]
29 апреля 2013 г. 10:44Отвечающий -
Похоже у меня заглючил PowerShell, перезапустил все нормально стало. У меня он 2 недели не выключался и я в нем постоянно что то делал,там уже куча переменных и всего было, может из-за этого. За помощь спасибо, тему придется удалить)
- Помечено в качестве ответа KazunEditor 29 апреля 2013 г. 11:09
29 апреля 2013 г. 11:02 -
Опять не работает, какая то мистика....
PS C:\Users\SteFFun> $s[0] -match "=.+\s";$Matches[0]
True
= 1 [REQ]или я что то не то делаю, мне нужно получить все знаки после "=" до следующего пробела.
29 апреля 2013 г. 11:11 -
Опять не работает, какая то мистика....
PS C:\Users\SteFFun> $s[0] -match "=.+\s";$Matches[0]
True
= 1 [REQ]или я что то не то делаю, мне нужно получить все знаки после "=" до следующего пробела.
В конце есть дополнительный пробел, поэтому и проблемы:
$s[0].Trim() -match "=.+\s";$Matches
Или подправить regex:
-match "=.+\b\s" (Будет = 1)
-match "= (.+)\b\s";$Matches[1] (Будет просто 1)
- Помечено в качестве ответа SteFFun 29 апреля 2013 г. 11:39
- Изменено KazunEditor 29 апреля 2013 г. 11:39
29 апреля 2013 г. 11:15Отвечающий -
Да точно, Вы правы! Спасибо, я почему то об этом не подумал.29 апреля 2013 г. 11:39