mbxngtgo
@mbxngtgo
веб программист

Как быстро заменить слова в разных файлах по шаблону из текстового файла?

Есть следующие файлы :

1.php
10.php
30.php

Внутри них текст одно и то же:

Один дома кушал паштет.

Еще есть слова для замены слова "паштет" который находиться в 33.txt
Варенье.
Мед.
Торт.

Задача такова.

Открыть файл 1.php заменить паштет на слово из txt это Варенье сохранить закрыть.
Открыть файл 10.php заменить паштет на слово из txt это Мед сохранить закрыть.
Открыть файл 30.php заменить паштет на слово из txt это Торт сохранить закрыть.

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

Как желательно через bat одним кликом заменить все файлы.Или notepad++.
  • Вопрос задан
  • 1178 просмотров
Пригласить эксперта
Ответы на вопрос 2
@res2001
Developer, ex-admin
Напишите на том же php скрипт замены или воспользуйтесь утилитой sed.
sed линуксовая утилита, но ее виндовая версия есть в составе msys2, git bash, cygwin и т.п. пакетах.
Вызовы sed можно завернуть в батник.

Непосредственно использовать bat сценарий для прямой замены скорее всего не выйдет, т.к. в php файлах обычно присутствуют символы, которые являются специальными для bat (такие как: <>&| ...), из-за них bat сценарий будет завершаться ошибкой и работу не сделает.
Но вызовы sed в батник завернуть можно, т.к. непосредственно замену будет совершать sed, а не батник.
Ответ написан
Комментировать
я не понял где catch ///// ?

```

1..3 | foreach-object {echo 'Внутри них текст одно и то же мясо' | out-file -filepath $_$_".txt" }
$plan = @{
'11.txt' = @{old ='мясо';
new = 'красная икра';}
'22.txt' = @{old ='мясо';
new = 'черный хлеб';}
'33.txt' = @{old ='мясо';
new = 'вообще что то несъедобное';}
}

$plan.keys | foreach-object {
$datafile = $_
$text = get-content -path (resolve-path $datafile)
$new_text = $text -replace $plan[$datafile]['old'], $plan[$datafile]['new']
write-output $new_text | out-file -filepath (resolve-path $datafile)
$new_text = get-content -path (resolve-path $datafile)
write-output ('в {0} попало {1}' -f $datafile, $new_text)
}

```
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы