Заміна слів у текстових файлах за допомогою PowerShell
Різноманітні текстові редактори, як-от стандартний Notepad або більш функціональний Notepad++, дозволяють створювати файли різноманітних форматів: від субтитрів та файлів журналів до пакетних файлів і скриптів PowerShell. Якщо редактор може створити файл, він також здатний його редагувати. Коли ви маєте справу з великою кількістю текстових файлів (з розширенням TXT), де потрібно замінити конкретне слово або фразу, PowerShell стане незамінним помічником. З його допомогою можна уникнути ручного відкриття та редагування кожного файлу окремо. Цей метод є застосовним не тільки до TXT, а й до інших форматів, які обробляються текстовими редакторами. Зараз ми розглянемо, як саме це можна зробити.
Підготовка до заміни
Насамперед, зберіть всі файли, в яких необхідно провести заміну, в одній папці. Скрипт буде обробляти файли лише з зазначеної директорії, а не всю файлову систему. Тому, переконайтеся, що потрібні файли знаходяться в одному місці.
Створіть новий файл у Блокноті та скопіюйте туди наступний код:
Get-ChildItem 'Шлях-до-файлів*.txt' -Recurse | ForEach { (Get-Content $_ | ForEach { $_ -replace 'Оригінальне-Слово', 'Нове-Слово' }) | Set-Content $_ }
Тепер потрібно внести кілька змін у цей скрипт. Перше, що потрібно зробити, – замінити “Шлях-до-файлів” на фактичну адресу папки, де знаходяться файли, в яких необхідно здійснити заміну. Далі, потрібно змінити “Оригінальне-Слово” на слово або фразу, яку ви хочете замінити. І, нарешті, замініть “Нове-Слово” на слово або фразу, якою ви хочете замінити старе. Розглянемо приклад: уявімо, що у нас є текстові файли, де неодноразово зустрічається слово “Запис”, і ми хочемо замінити його на “Стаття”. Ось як буде виглядати скрипт після редагування:
Get-ChildItem 'C:UsersfatiwDesktopnotepad-files*.txt' -Recurse | ForEach { (Get-Content $_ | ForEach { $_ -replace 'Запис', 'Стаття' }) | Set-Content $_ }
Після того, як скрипт відредаговано, збережіть його з розширенням .ps1. Не забудьте у вікні збереження змінити тип файлу з “Текстові файли” на “Всі файли”. Запустіть цей скрипт, і він виконає необхідну заміну в усіх вказаних файлах.
Якщо потрібно застосувати цей скрипт до файлів іншого формату, наприклад, XML або LOG, вам потрібно змінити розширення файлу в першому рядку скрипта. Наприклад, замість:
Get-ChildItem 'C:UsersfatiwDesktopnotepad-files*.txt'
Потрібно використовувати:
Get-ChildItem 'C:UsersfatiwDesktopnotepad-files*.xml'
Важливо пам’ятати: цей скрипт виконує заміну по входженню, а не по цілому слову. Якщо ви хочете замінити всі входження “на” на “у”, то скрипт також замінить “на” в словах “наприклад” або “навігація”. Це є недоліком цього методу. Щоб цього уникнути, можна скористатися редактором Notepad++, який має функцію пошуку і заміни по цілому слову.