Найти и заменить несколько разных значений одновременно


15

У меня есть файл с несколькими экземплярами Text_1и Text1и мне нужно заменить оба эти строки с Text_Aи TextBсоответственно.

В настоящее время я выполняю две функции поиска и замены для каждого файла, одна из которых находит Text_1и заменяет его, Text_Aа другая - находит Text1и заменяет его TextB.

Есть ли способ сделать это все сразу, вместо того, чтобы дважды запустить «Найти и заменить»?

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

Если приведенное выше описание не понятно, позвольте мне объяснить это следующим образом ...

Я хочу запустить Find & Replace 1 раз в 1 документе, и я хочу, чтобы он выполнял ВСЕ из следующего во время этого одного экземпляра Find & Replace:

  1. Найти Text_1 и заменить наText_A
  2. Найти Text1 и заменить наTextB

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


Это может быть возможно с помощью Regexp найти и заменить, если есть отличный шаблон. Иначе это невозможно
@matt

Ответы:


9

Посмотри на Седа . Вы можете легко достичь своей цели только одной командной строкой

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


24

Начиная с Notepad ++ 6.0, на самом деле это возможно без сценариев, использующих следующую технику:

Найти: Текст_1 и заменить на: Текст_А

Найти: Text2 и заменить на: TextB

Найти: (Text_1) | (Text2)

Заменить: (? 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) времени.

Вы хотите найти два разных термина. Запуск Find & Replace дважды выглядит так:

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.