Знайдіть і замініть декілька кількох різних значень одночасно


15

У мене є файл з декількома екземплярами Text_1і Text1і мені потрібно замінити обидва ці рядки з Text_Aі TextBвідповідно.

В даний час я виконую дві функції пошуку та заміни у кожному файлі, таку, яку він знаходить Text_1і замінює, Text_Aа іншу, яку він знаходить Text1і замінює TextB.

Чи є спосіб зробити це все одночасно, замість того, щоб двічі запускати "Знайти та замінити"?

Я використовую Dreamweaver CS3, але у мене також є Notepad ++, звичайний Notepad, OO Writer, MS Word, якщо це буде простіше. В ідеалі я міг би це зробити в Dreamweaver або Notepad ++, але я готовий завантажити щось інше, щоб виконати роботу. Я вважаю за краще не робити жодного матеріалу командного рядка або створювати пакетний файл (хоча я це знаю, я не розумію цього насправді).

Якщо вищеописаний опис не зрозумілий, дозвольте мені пояснити це таким чином ...

Я хочу запустити «Знайти та замінити» 1 раз в 1 документі, і я хочу, щоб це виконувало ВСЕ з наступного під час цього одного екземпляра «Знайти та замінити»:

  1. Знайдіть Text_1 і замініть наText_A
  2. Знайдіть Text1 і замініть наTextB

Я не намагаюсь знайти та замінити декілька документів.


Можливо, за допомогою Regexp знайти і замінити, якщо існує чітка закономірність. Інакше це неможливо @matt
Sathyajith Bhat

Відповіді:


9

Погляньте на Sed . Ви можете легко досягти своєї мети лише одним командним рядком

sed -e "s/Text_1/TextA/" -e "s/Text1/TextB/" <your_file.txt>your_file_new.txt


24

Оскільки Notepad ++ 6.0, насправді можливо без скриптів, використовуючи наступну техніку:

Знайдіть: Text_1 та замініть на: Text_A

Знайдіть: Text2 та замініть на: TextB

Знайти: (Текст_1) | (Текст2)

Замінити: (? 1Text_A) (? 2TextB)

Загальний синтаксис:

Find: (FindA)|(FindB)|(FindC)...

Replace: (?1ReplaceA)(?2ReplaceB)(?3ReplaceC)...

«1 відноситься до першої захопленої фрази тощо.

Я отримав це з наступної відповіді: /programming//a/16104946/287101


3

Використовуючи Notepad ++, ви можете будь-який

  • Відкрийте всі файли, що містять слова, які ви хочете замінити, і використовуйте функцію пошуку / заміни у всіх відкритих файлах

    введіть тут опис зображення

  • Використовуйте Знайти / Замінити у файлах

    введіть тут опис зображення

  • Запишіть макрос, який виконує знаходження та заміну параметрів, і відтворіть його


Це не те, що я намагаюся зробити. Я не хочу замінювати його відразу на декількох файлах, я хочу замінити декілька рядків у одному файлі одночасно. Я хочу мати змогу запустити одну знахідку та заміну і запропонувати їй шукати документ і замінити всі екземпляри Text_1 на Text_A та всі екземпляри Text1 на TextB. Дві окремі рядки замінені двома окремими значеннями в одному файлі.
мат

Зображення-посилання порушені, чи є шанс ви їх якось виправити?
Боббі

2

Вам краще запустити Find & Replace два рази, оскільки у вас відбувається дві різні заміни. Однак у процесі обробки має бути дуже мало компромісів. Розглянемо наступне:

Запуск Знайти та замінити один раз, пошуковий термін за терміном:

Get Term
  Does term match?  If so, replace term
Get Next Term
...

Для цілей роботи будемо вважати, що це лінійно і скажемо, що це працює в O (n) час.

Ви хочете знайти два різних терміни. Запуск пошуку та заміни двічі виглядає так:

Get Term
  Does term match?  If so, replace term
Get Next Term
...

Get Term
  Does term match?  If so, replace term
Get Next Term
...

що займе час O (2x1n) або вдвічі більше, ніж пошук одного терміна.

Пошук двох термінів з двома замінами теоретично виглядатиме так:

Get Term
  Does first term match?  If so, replace first term
  Does second term match?  If so, replace second term
Get Next Term
...

Отримання термінів не вимагає великої потужності обробки, тому по суті ви шукаєте два набори пошуку для кожного терміна, даючи час O (1x2n), запускаючи один раз, але шукаючи два терміни.

Хоча ви заощадите деякий час, не завантажуючи кожен термін двічі, ви витратили б більше часу на пошук кожного терміна двічі, тому невеликий компроміс, і оскільки ця функція буде використовуватися рідше, ніж пошук одного терміна за допомогою однієї заміни, розробники додатків просто припускають, що не писати що функціональність.

ВІДМОВА ПРОГРАММИ: Це узагальнений приклад. Я знаю, що це краще, але я намагаюся показати, чому ця функція не знайдена.


0

Підтримка регулярних виразів у Notepad ++ суворо обмежена. Без оператора чергування немає надії навіть наблизитися до того, що ви хочете зробити. Вам потрібно буде скористатися sedабо редактором, який має кращу підтримку регулярного виразів.

Зазвичай використовувані розширення GNU до синтаксису регулярного вираження включають:

  • то? оператор, що означає нуль або такий собі;
  • | оператор чергування ("foo | bar" відповідає або "foo", або "bar")
  • модифікатори типу / g для жадібних або / i для нечутливих до випадків;
  • {a, b} для позначення a і b лексеми свого роду.
  • (візерунок) + для оброблення однієї чи декількох збігів того самого шаблону

Компонент Scitilla, який лежить в основі Notepad ++, суворо сумісний з POSIX і не розпізнає ці розширення. Ви можете проконсультуватися з регулярними виразами для повного проходу та деяких прикладів

Джерело

Дивись також

GNUWin32 sedдля Windows


0

Я використовую TextCrawler для пошуку та заміни пакетів. (Я використовую Notepad ++ для одного пошуку / заміни в декількох файлах, оскільки це швидше, ніж Textcrawler.) TextCrawler підтримує регулярні вирази, а також звичайний пошук / пошук. Пакетні файли можна зберегти та перезавантажити для подальшого використання.


Будь ласка, див. Як я рекомендую програмне забезпечення у своїх відповідях? Зокрема, з мінімумом говоріть, де взяти програмне забезпечення.
G-Man каже: «Відновіть Моніку»

Пакетна функція доступна лише у невільній Pro версії TextCrawler.
Гоббс

0

Також це можна зробити, використовуючи плагін ActiveX (для Notepad ++) та виконавши спеціальний сценарій:

NppApplication.activeEditor.text
=NppApplication.activeEditor.text
.replace(/Text_1/g,"Text_A")
.replace(/Text1/g,"TextB")

Це працює, але зауважте, що через поточну помилку в плагіні ActiveX до файлу додається символ NULL при кожному запуску сценарію.
Айдан

-1

Це працює для всіх номерів (щоб видалити всі номери з тексту / статті)

  1. Натисніть Ctrl + H, щоб відкрити діалогове вікно "Знайти та замінити".

  2. У полі "Знайти що" введіть ^ #

  3. Залиште поле "Замінити на" порожнім.

  4. Замінити всіх.


1
ОП не просто хоче, щоб цифри були вилучені, вони хотіли замінити його буквою.
booyaa
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.