Программное обеспечение для поиска и замены, допускающее замену слов длиной более 234 206 символов.

Мне нужно заменить слова в файлах/папках на длину замены слов (234 206 слов).

Notepad++ не позволяет заменять подсчет слов более чем на 2047 слов. TextCrawler 3 не допускает замены слов более чем на 29 999 слов.

Просто простая замена. Специальное регулярное выражение не требуется.
Необходима опция «Файлы/подпапки в папке».

Возможно , Swiss File Knife сможет это сделать.

Ответы (2)

Вы должны быть в состоянии сделать это с помощью простого скрипта Python , например:

import os

# Assuming that the replacement words are in a plain text file with
# colon separating the original & new words and one pair per line.
SEP = ":"
REPLACE_SOURCE = "/full/path/to/replacement/list.txt"
START_DIR = "."
with open(REPLACE_SOURCE) as infile:
    replacement_pairs = [line.strip().split(SEP) for line in infile]

for (root, dirs, files) in os.walk(START_DIR):
    print("Working in", root)
    for fname in files:
        fullpath = os.path.abspath(os.path.join(root, fname)
        if fname.lower.endswith('.txt') and fullpaht != REPLACE_SOURCE:
            print("\tProcessing", fname)
            intext = open(fullpath).read()
            for orig, repl in replacement_pairs:
                intext = intext.replace(orig, repl)
            # You may wish to consider renaming the original file here!
            with open(fullpath, 'wt') as outfile:
                outile.write(intext)

Предупреждение выше заменит содержимое всех файлов .txt в текущем каталоге.

Это должно хорошо справляться, если только некоторые файлы не слишком велики для содержимого, чтобы поместиться в доступную память.

Python бесплатный, кроссплатформенный и с открытым исходным кодом.

Спасибо, @Steve Baarnes. Включает ли он *.txt во вложенные папки?
Приведенный выше скрипт будет выполнять замену для каждого файла *.txt во всех подкаталогах ниже текущего каталога (кроме исходного файла замены (если он находится в текущем каталоге или во вложенном каталоге).

Итак, у вас есть этот массивный простой текстовый документ, и вы собираетесь искать/заменять что-то, что имеет сотни тысяч вхождений.

Выйдите из Блокнота и просто запустите sedего. https://www.gnu.org/software/sed/manual/sed.txt

Встроенные в OS X и Linux, есть порты/сборки win32, они должны быть в linux-inside-windows и т. д.

Я прочитал вопрос, так как существует 234 206 пар слов, которые должны быть заменены всеми оригиналами, поэтому в любом файле может быть изменено только одно слово или несколько тысяч в каждом из любого количества файлов в каталоге и подкаталогах - это было бы означает рекурсивный вызов sed в общей сложности 234 206 раз, поэтому это может занять некоторое время.