Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] Потребовалось заменить текст в файлах

Ответить
Настройки темы
PowerShell - [решено] Потребовалось заменить текст в файлах

Новый участник


Сообщения: 3
Благодарности: 0


Конфигурация

Профиль | Отправить PM | Цитировать


Доброго дня.
Потребовалось заменить текст в файлах.
Например в файле В34567.smt найти все 4567#В4#5676 и заменить их на 4567#БЫР4#5676.
При этом помимо этого в тексте может содержаться фразы имеющие в себе эту букву "В" например "Всегда так делал" , нужно это учесть и не заменять букву в предложениях. Текст в файле на русском языке, замена происходит так же русских символов.
Интересует реализация в Power Shell.
Заранее премного благодарен за любую помощь.

Отправлено: 08:47, 21-01-2013

 

Ветеран


Сообщения: 1259
Благодарности: 861

Профиль | Отправить PM | Цитировать


(gc text.txt) -replace "\b4567#В4#5676\b","4567#БЫР4#5676"
Это сообщение посчитали полезным следующие участники:

Отправлено: 09:14, 21-01-2013 | #2



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

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


Старожил


Сообщения: 280
Благодарности: 72

Профиль | Отправить PM | Цитировать


А структура файла можно поподробней?
Код: Выделить весь код
Get-Content c:\test\В34567.smt | ForEach-Object {$_ -replace '4567#В4#5676','4567#БЫР4#5676.'} | Set-Content c:\test\В34567.smt
Это сообщение посчитали полезным следующие участники:

Отправлено: 09:35, 21-01-2013 | #3


Новый участник


Сообщения: 3
Благодарности: 0

Профиль | Отправить PM | Цитировать


Касаемо структуры:

20#1#Е09-03-015-1#т#Монтаж прогонов =ДЕМОНТАЖ = Коз=0.0; Кэм=0.0; Кзм=0.0; Кмр=0#8648648#8646884#564.54#54665.45#####95.54#41.54#546.7#1546.48#5441.22#269.34#0#0#0##11.5451#1. 5445#2#10,7#0###1#0#0#
0#Коэффициент#Особые условия 2004 (СТР),Работы вне зданий#МДС 374.2004-567##:СТРПРЕТ;777*77;5.44*ЗМ;0.77*ЭМч;0.55*ТЗО;0.88*ТЗМ

и так далее.

В тексте может быть много разных:

20#1#Е09-03-015-5#п#
44#5#Е45-34-458-4#и#
56#2#Е96-47-325-2#а#

нужно заменить в таком файле все Е, например на НЕП.

20#1#НЕП09-03-015-5#п#
44#5#НЕП45-34-458-4#и#
56#2#НЕП96-47-325-2#а#

и соответственно:

20#1#НЕП09-03-015-1#т#Монтаж прогонов =ДЕМОНТАЖ = Коз=0.0; Кэм=0.0; Кзм=0.0; Кмр=0#8648648#8646884#564.54#54665.45#####95.54#41.54#546.7#1546.48#5441.22#269.34#0#0#0##11.5451#1. 5445#2#10,7#0###1#0#0#
0#Коэффициент#Особые условия 2004 (СТР),Работы вне зданий#МДС 374.2004-567##:СТРПРЕТ;777*77;5.44*ЗМ;0.77*ЭМч;0.55*ТЗО;0.88*ТЗМ

и так далее, естественно чтобы не получилось такого:

20#1#НЕП09-03-015-1#т#Монтаж прогонов =ДНЕПМОНТАЖ = Коз=0.0; Кэм=0.0; Кзм=0.0; Кмр=0#8648648#8646884#564.54#54665.45#####95.54#41.54#546.7#1546.48#5441.22#269.34#0#0#0##11.5451#1. 5445#2#10,7#0###1#0#0#
0#Коэффициент#Особые условия 2004 (СТР),Работы вне зданий#МДС 374.2004-567##:СТРПРЕТ;777*77;5.44*ЗМ;0.77*ЭМч;0.55*ТЗО;0.88*ТЗМ

Отправлено: 09:59, 21-01-2013 | #4


Старожил


Сообщения: 280
Благодарности: 72

Профиль | Отправить PM | Цитировать


А если вот так вот
Код: Выделить весь код
$replace = Get-Content c:\test\В34567.smt  -Delimiter "#" 
   foreach   ( $find in $replace) {
      if ($find -match "^Е[0123456789]" ) {
         $fraza = $find -replace 'Е','НЕП'
         $newreplace = Get-Content c:\test\В34567.smt  | ForEach-Object {$_ -replace $find , $fraza} | Set-Content c:\test\В34567.smt1 -Encoding utf8
      }
   }

Отправлено: 17:55, 21-01-2013 | #5


Ветеран


Сообщения: 1259
Благодарности: 861

Профиль | Отправить PM | Цитировать


(gc text.txt) -creplace "#Е","#НЕП"

Отправлено: 18:17, 21-01-2013 | #6


Новый участник


Сообщения: 3
Благодарности: 0

Профиль | Отправить PM | Цитировать


Большое спасибо!

Последний раз редактировалось Anderwood, 24-01-2013 в 12:01.


Отправлено: 15:26, 23-01-2013 | #7


Пользователь


Сообщения: 126
Благодарности: 3

Профиль | Отправить PM | Цитировать


Подскажите по замене, есть строки в файле, вот одна из них:
Apr 17 06:08:40 mail pop3d-ssl: LOGIN, user=username@domain.ru, ip=[::ffff:192.168.0.100], port=[56795]

Как произвести замену и оставить только "username@domain.ru"? Весь мозг сломал с -replace... Спасибо

Отправлено: 11:17, 23-04-2013 | #8


Ветеран


Сообщения: 1259
Благодарности: 861

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
PS> "Apr 17 06:08:40 mail pop3d-ssl: LOGIN, user=username@domain.ru, ip=[::ffff:192.168.0.100], port=[56795]" -replace ".+user=(.+), ip.+",'$1'
username@domain.ru
Это сообщение посчитали полезным следующие участники:

Отправлено: 11:24, 23-04-2013 | #9


Пользователь


Сообщения: 126
Благодарности: 3

Профиль | Отправить PM | Цитировать


Kazun, Мерси...

Последний раз редактировалось rudimko, 23-04-2013 в 12:17.


Отправлено: 11:28, 23-04-2013 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] Потребовалось заменить текст в файлах

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Найти txt файл по имени и заменить содержание файла на мой текст! Fresenius Скриптовые языки администрирования Windows 5 21-11-2012 08:49
CMD/BAT - Найти и заменить текст в файле. Yurich75 Скриптовые языки администрирования Windows 2 07-01-2012 19:09
CMD/BAT - С помощью bat-ника найти и заменить текст в файле на текст из другого файла Nun-Nun Скриптовые языки администрирования Windows 1 08-03-2011 15:25
FreeBSD - Найти текст во всем файлах nibbl Общий по FreeBSD 1 23-08-2010 15:21
[решено] Заменить текст в строке внутри символов <> FlatX007 AutoIt 2 03-09-2009 22:14




 
Переход