none
Выбрать определенный файл и отредактировать его. RRS feed

  • Вопрос

  • Ребята привет!Есть вопрос!

    Есть папка с файлами,нужно выбрать определенный файл и немного его изменить.С выборкой вроде проблем нет.

    $rep= Get-item 'C:\test\*.*' # папка с файлами
      foreach   ( $find in $rep) 
      {
          if ($find.Name -match "^103" ) #ищем вначале заголовка номер
          
          {write-host 'файл найден'}
          }
    

    А вот как его отредактировать  не знаю: Формат файла:

    {1:F91RRBKRTMXXXX          }{2:I103RZBAATWWXXXXN}

    Нужно после X добавить десять символов,любых.Например 

    {1:F91RRBKRTMXXXX1234567890}{2:I103RZBAATWWXXXXN}

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

Ответы

  • PS > "{1:F91RRBKRTMXXXX        }{2:I103RZBAATWWXXXXN}" -replace "X(\s+)?}","X$(Get-Random)}"
    {1:F91RRBKRTMXXXX1811948805}{2:I103RZBAATWWXXXXN}
    
    
    PS > "{1:F91RRBKRTMXXXX        }{2:I103RZBAATWWXXXXN}" -replace "X(\s+)?}","X1234567890}"
    {1:F91RRBKRTMXXXX1234567890}{2:I103RZBAATWWXXXXN}
    
    
    gc file.txt | Foreach {
    	$_ -replace "X(\s+)?}","X1234567890}"
    }

    • Предложено в качестве ответа Vector BCOModerator 30 мая 2016 г. 7:54
    • Помечено в качестве ответа Vector BCOModerator 31 мая 2016 г. 21:07
    Отвечающий
  • Хорошо!Спасибо!Нужно найти строчку в файле содержащую,и после XXXX подставить 1234567890 (должно получиться - "{1:F91RRBKRTMXXXX1234567890}{2:I103RZBAATWWXXXXN}"       ) 

    "{1:F91RRBKRTMXXXX        }{2:I103RZBAATWWXXXXN}"

    Строчка в файле всегда такая? сделайте замену строки на другую 

    -replace "\{1\:F91RRBKRTMXXXX        \}\{2\:I103RZBAATWWXXXXN\}", "{1:F91RRBKRTMXXXX1234567890}{2:I103RZBAATWWXXXXN}"

    Вариант предложенный Kazun`ом будет искать все места в которых втречается Х и любое количество пробелов после которых находится закрывающая скобка, и менять на Х1234567890}

    Если у вас таких мест будет много то и строчки поменяются в нескольких местах

    Для того что бы понимать что произойдет нужно иметь полную картину, вы предоставляете только лишь маленькую часть.

    Например если в файле 1 строка описанного содержания все примеры будут работать, а вот если строк 2 и более все может сильно поменяться в зависимости от того что в остальных строках + если файлы содержат не точно такую строку а похожую примеры так же себя поведут по разному



    The opinion expressed by me is not an official position of Microsoft

    • Предложено в качестве ответа Vector BCOModerator 31 мая 2016 г. 21:07
    • Помечено в качестве ответа Vector BCOModerator 31 мая 2016 г. 21:07
    Модератор

Все ответы

  • Я тут подумал- надо сделать через Add-Content -Value '1234567890'. Только вот каким образом поместить эти данные в нужное место?
  • Я тут подумал- надо сделать через Add-Content -Value '1234567890'. Только вот каким образом поместить эти данные в нужное место?

    Вам ответ дали выше + готовых решений в гугле на первой странице запроса более чем достаточно.

    Вот тому пример

    http://stackoverflow.com/questions/17144355/string-replace-file-content-with-powershell

    Не совсем ясен принцип поиска того что нужно искать и на что заменять

    Пример регекспа может быть таким

    '^(?''replace''\{[^}]+x)\s+}', "$(Matches['replace'])1234567890}"

    Хотя регексп может быть и любым дркгим учитывая что критерии поиска весьма размыты


    The opinion expressed by me is not an official position of Microsoft



    • Изменено Vector BCOModerator 30 мая 2016 г. 8:06 Поправил паттерн (добавил \s+)
    Модератор
  • Легче привести шаблонный файл с указанием, где и что надо поменять.

    "{1:F91RRBKRTMXXXX        }{2:I103RZBAATWWXXXXN}" -replace "X(\s+)?}","X$(Get-Random)}"

    Отвечающий
  • Хорошо!Спасибо!Нужно найти строчку в файле содержащую,и после XXXX подставить 1234567890 (должно получиться - "{1:F91RRBKRTMXXXX1234567890}{2:I103RZBAATWWXXXXN}"       ) 

    "{1:F91RRBKRTMXXXX        }{2:I103RZBAATWWXXXXN}"
  • PS > "{1:F91RRBKRTMXXXX        }{2:I103RZBAATWWXXXXN}" -replace "X(\s+)?}","X$(Get-Random)}"
    {1:F91RRBKRTMXXXX1811948805}{2:I103RZBAATWWXXXXN}
    
    
    PS > "{1:F91RRBKRTMXXXX        }{2:I103RZBAATWWXXXXN}" -replace "X(\s+)?}","X1234567890}"
    {1:F91RRBKRTMXXXX1234567890}{2:I103RZBAATWWXXXXN}
    
    
    gc file.txt | Foreach {
    	$_ -replace "X(\s+)?}","X1234567890}"
    }

    • Предложено в качестве ответа Vector BCOModerator 30 мая 2016 г. 7:54
    • Помечено в качестве ответа Vector BCOModerator 31 мая 2016 г. 21:07
    Отвечающий
  • Хорошо!Спасибо!Нужно найти строчку в файле содержащую,и после XXXX подставить 1234567890 (должно получиться - "{1:F91RRBKRTMXXXX1234567890}{2:I103RZBAATWWXXXXN}"       ) 

    "{1:F91RRBKRTMXXXX        }{2:I103RZBAATWWXXXXN}"

    Строчка в файле всегда такая? сделайте замену строки на другую 

    -replace "\{1\:F91RRBKRTMXXXX        \}\{2\:I103RZBAATWWXXXXN\}", "{1:F91RRBKRTMXXXX1234567890}{2:I103RZBAATWWXXXXN}"

    Вариант предложенный Kazun`ом будет искать все места в которых втречается Х и любое количество пробелов после которых находится закрывающая скобка, и менять на Х1234567890}

    Если у вас таких мест будет много то и строчки поменяются в нескольких местах

    Для того что бы понимать что произойдет нужно иметь полную картину, вы предоставляете только лишь маленькую часть.

    Например если в файле 1 строка описанного содержания все примеры будут работать, а вот если строк 2 и более все может сильно поменяться в зависимости от того что в остальных строках + если файлы содержат не точно такую строку а похожую примеры так же себя поведут по разному



    The opinion expressed by me is not an official position of Microsoft

    • Предложено в качестве ответа Vector BCOModerator 31 мая 2016 г. 21:07
    • Помечено в качестве ответа Vector BCOModerator 31 мая 2016 г. 21:07
    Модератор
  • Да!Строка такая только одна! Спасибо огромное!Буду разбираться!отпишусь!