ayran
@ayran
Ученик

Замена существующего содержимого в файле?

В обычном gulpfile.js в 63 строки, понадобилось заменить 'main' на 'grum'. Сделал так:
( gc -Path "grum\gulpfile.js" ) | 
    % { $_ -Replace 'main', 'grum' } | 
Set-Content -Path "grum\gulpfile.js"

…и это работает. Что если придётся заменить не одно слово, а, скажем, несколько десятков или около того? Как прописать большее количество необходимых замен?
  • Вопрос задан
  • 174 просмотра
Пригласить эксперта
Ответы на вопрос 3
Код
$filePath = "C:\путь\к\файлу\имя.js"
$oldWord = "староеСлово"
$newWord = "новоеСлово"

# Чтение содержимого файла
$fileContent = Get-Content $filePath

# Замена всех совпадений
$fileContent = $fileContent -replace $oldWord, $newWord

# Запись изменённого содержимого обратно в файл
Set-Content $filePath $fileContent


Может такой вариант тебе подойдёт?
Ответ написан
@NortheR73
системный инженер
Можно создать csv-файл со списком замен. Каждая строка примерно такая: "oldText"; "newText".
И дальше в цикле foreach перебираете ваш словарь замен и выполняете замены (про это уже написали ранее)
Ответ написан
Комментировать
@yellowmew
Cloud infrastructure, monitoring engineer. SRE
замена вашего однострочника, с соблюдением требований многократной замены
(get-content file.txt -raw) -replace "1","2"  -replace "3","4"  -replace "5","6" | out-file file.txt


или, если вы не готовы прописывать все замены в командной строке а хотите, как тут посоветовали, читать из csv файла с заголовками oldword и newword. Будет как то так, но код не тестировал, написал по памяти
$pairs = import-csv csvfile.txt
$filecontent =  get-content file.txt -raw
foreach ($pair in $pairs) { $filecontent =$filecontent -replace $pair.oldword,$pair.newword }
set-content file.txt -value $filecontent


Кстати, когда задаете вопрос - лучше пользоваться полными наименованиями операций и функций
P.S. меня в комментариях поправили - нашли ошибку. Чтобы код был хоть как-то работоспособен я ошибку исправил в ответе. Спасибо! )
Дополнительно нашел свою ошибку в комментарии к коду автора вопроса. И исправил ее у себя )
get-content возвращает массив строк, поэтому % (foreach) в вопросе имеет смысл - my bad
мой "неэффективный" но работающий скрипт теперь считывает весь файл в одну строку
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы