Потребовалось заменить текст в файлах
Доброго дня.
Потребовалось заменить текст в файлах. Например в файле В34567.smt найти все 4567#В4#5676 и заменить их на 4567#БЫР4#5676. При этом помимо этого в тексте может содержаться фразы имеющие в себе эту букву "В" например "Всегда так делал" , нужно это учесть и не заменять букву в предложениях. Текст в файле на русском языке, замена происходит так же русских символов. Интересует реализация в Power Shell. Заранее премного благодарен за любую помощь. |
(gc text.txt) -replace "\b4567#В4#5676\b","4567#БЫР4#5676"
|
А структура файла можно поподробней?
Код:
Get-Content c:\test\В34567.smt | ForEach-Object {$_ -replace '4567#В4#5676','4567#БЫР4#5676.'} | Set-Content c:\test\В34567.smt |
Касаемо структуры:
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*ТЗМ |
А если вот так вот
Код:
$replace = Get-Content c:\test\В34567.smt -Delimiter "#" |
(gc text.txt) -creplace "#Е","#НЕП"
|
Большое спасибо!
|
Подскажите по замене, есть строки в файле, вот одна из них:
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... Спасибо |
Код:
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' |
Kazun, Мерси...
|
$m | Select -Unique
|
Доброго дня.
Апну тему. По вышеупомянутому образцу написал скрипт, но обновить действующий файл не получается - PS выдаёт, что файл "занят другим приложением". При этом, если в скрипте название выходного файла другое, то он создаёт в этой же директории изменяемый файл. В чём может быть ошибка? Спасибо заранее. |
4524, это не ошибка - текстовые файлы не редактируются, а перезаписываются целиком либо только дописывают данные в конец. Либо через память, либо через временный файл.
|
Цитата:
Код:
(Get-Content file.txt) -replace 'регулярное_выражение','замена' | Set-Content file.txt |
Цитата:
Сохраняйте файл через Out-File: Код:
(Get-Content file.txt) -replace 'регулярное_выражение','замена' | Out-File file.txt -Encoding utf8 Код:
$i = (Get-Content file.txt) -replace 'регулярное_выражение','замена' |
Цитата:
|
Цитата:
У меня при редактировании или создании плейлистов часто такая ошибка была при использовании Set-Content по конвееру. Сейчас просто нету свежего примера. |
Цитата:
Цитата:
|
Foreigner, там, выше, было и без скобок.
|
Цитата:
|
Цитата:
|
Iska, Раз 4524 не привел конкретно того, что у него не получилось, я предложил общую схему, которая у меня работает всегда. От нее и отталкиваюсь в дальнейшей дискуссии. А не от 2013 года
|
Цитата:
|
Цитата:
Т.е. это конкретика, а ее нет. |
Время: 12:29. |
Время: 12:29.
© OSzone.net 2001-