У деяких випадках ми хочемо замінити текст у файлі, наприклад, змінити Document.txt все, що означає "моя сім'я" для "ми". Щоб досягти цього, ми можемо використовувати наш улюблений текстовий редактор (Kate, Gedit, SublimeText тощо), але завжди корисно знати варіанти та інші способи досягнення того самого результату
Буває, що с регулярні вирази ви можете досягти цього, команда sed просто чудова, вона має нескінченні варіанти та варіанти, але ... для тих, хто просто хоче замінити текст із можливий найменш складний спосібдля них це те, що я пропоную набагато простіший варіант:
За прикладом маємо файл Document.txt знаходиться в $ HOME / Document.txt з таким текстом:
(...) моя родина Це як усі, як ваша або сусідська. Насправді моя родина Ми намагаємось бути відповідальними людьми та в очах суспільства політично та соціально коректними. Однак у моєму домі є чорна вівця, і це моя роль LOL! Я завжди був тим, хто не боїться говорити те, що думає (хоча це, мабуть, не є коректним в очах суспільства), хоча насправді моїй родині набридло
брудсучасне суспільство.
За допомогою наступної команди ви зміните «моя родина"автор"ми":
perl -pi -e "s[mi familia][nosotros]g" $HOME/Documento.txt
Це так просто
Отже, текст буде таким:
(...) ми Це як усі, як ваша або сусідська. Насправді ми Ми намагаємось бути відповідальними людьми та в очах суспільства політично та соціально коректними. Однак у моєму домі є чорна вівця, і це моя роль LOL! Я завжди був тим, хто не боїться говорити те, що думає (хоча це, мабуть, не є коректним в очах суспільства), хоча насправді моїй родині набридло
брудсучасне суспільство.
Синтаксис:
perl -pi -e "s[lo-que-quiero-cambiar][lo-nuevo-a-poner]g" archivo-en-el-cual-reemplazar
Команда може здатися трохи складною, давайте розберемо її трохи і пояснимо трохи простіше
- Perl : Що ми будемо використовувати, perl
- -пі : Пі, як π (приблизне значення 3.14)
- -e : E уявляють, що «e виконати» ^ - ^
- Тоді в лапках » ми відкриваємо за допомогою s і ми закриваємо a g: "sg" …уявіть S для Start і G для Game Over
- Поверніть між sg ми повинні поставити два набори дужок: [] y [], будучи таким: "S [] [] g"
- Усередині перших дужок, як я вже говорив вище, надходитиме текст, який ми хочемо видалити та замінити новим, тоді як у другому наборі дужок піде новий текст, який слід поставити, слідуючи прикладу: "S [моя сім’я] [ми] g"
Чи не просто?
Пояснення насправді набагато довше, ніж те, що необхідно для команди, його досить просто зрозуміти
Perl — це набагато, набагато більше, ніж спосіб заміни тексту, це ціла мова
Якщо ви хочете дізнатись більше про це, встановіть пакет perl-doc і погляньте на whooodo, що це дозволяє, це просто інший Всесвіт.
До речі, і закрити, припускаючи, що ви хочете знайти всі файли .txt, які у вас є в $ HOME / Documents /, і в кожному з них замінити "моя сім'я" на "ми", ви можете приєднатися до find + perl для досягнення цього:
find $HOME/Documentos/ -name *.txt -exec perl -p -i -e "s[mi familia][nosotros]g" {} \;
Або використовуючи підстановочний знак:
perl -p -i -e "s[mi familia][nosotros]g" $HOME/Documentos/*.txt
Проблема з цим другим варіантом полягає в тому, що він не замінить файли, які знаходяться у вкладених папках
У будь-якому випадку, я сподіваюся, вам було цікаво. Для мене це було дуже корисно, тепер я можу замінювати текст безпосередньо з терміналу... чудово!