2

Я использую Windows Xp.

Я хочу заменить слово длиной 200 000 символов, и в CMD возникают проблемы (слишком длинная строка ввода). В Linux у терминала такие же проблемы с длиной?

Если я заменю много слов многими другими словами, я не смогу заменить символ на / потому что CMD выдает ошибку вывода.

Есть ли решение, чтобы обойти эту проблему?

2 ответа2

1

Я использую Sed для Windows на Win7. Я столкнулся с проблемой, когда строка замены была слишком большой. Я использовал это для замены разделов файлов конфигурации, и после примерно 10000 символов он перестал работать и выдал ошибку «Невозможно найти указанный файл».

В итоге мне пришлось разбить замену на 2 операции. Первый будет заполнять 1/2 данных и оканчиваться ### ENDOFSECTION ###, а затем другая замена заменит ### ENDOFSECTION ### остальными данными. Не уверен, если это просто ограничение Windows или нет.

0

Относительно вашего вопроса о командной строке терминала Linux. Ответ таков: он может обрабатывать гораздо большие строки, которые в значительной степени зависят от того, сколько у вас свободной оперативной памяти. Например. Из командной строки я просто запустил printf '%s' со строкой в 20 000 000 байтов; у него не было проблем. Я также запускал его через sed.exeвинной среде Linux); это тоже нормально работало ... Каким бы ни был предел командной строки, он также зависит от того, с какой программой вы можете передавать такие большие строки, так как их максимальный размер ввода команды.

Но это необычная / странная ситуация, в которой вы хотите передать такие большие строки в программу, потому что в какой-то момент вы достигнете максимума.

С помощью sed и таких больших строк вы можете сделать одну из двух вещей:

  1. Запишите свои данные в файл и используйте:

    sed "s@ab/cd@AB_CD@" my_data_file

  2. pipe (|) вывод команды для стандартного ввода sed:

    my_data_app | sed "s@ab/cd@AB_CD@"

Обратите внимание, что у самого sed может быть некоторое ограничение длины строки, но из памяти ограничение GNU sed довольно высокое.

Кроме того, вместо значения по умолчанию / , я использовал @ , но вы можете использовать практически все, что вам нравится.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .