none
Проблемы с пробелами при разборе текста PowerShell RRS feed

  • Вопрос

  • Добрый день!

    Не могу понять в чем дело и в чем разница. Есть файл со строками вида:

    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