Основные sed управляют на большом коротком файле: не мог перераспределить память

Как обновить страницу справочника в режиме страницы справочника при редактировании roff источника:

;;;; MAN / man
(defvar *curr-man* "~/mansv/ls.1")

(defun edman ()
  "edit the current work-in-progress man page"
  (interactive)
  (find-file *curr-man*) )

(defun upman () ; edit: better version of this function below
  "update the current work-in-progress man page"
  (interactive)
  (buffer-menu)
  (revert-buffer)
  (with-temp-buffer
    (progn
      (insert-buffer-substring "*Buffer List*")
      (beginning-of-buffer)
        (let ((man-buffer (format "*Man %s*" *curr-man*)))
          (if (word-search-forward man-buffer (point-max) t) ; t = nil on fail
            (kill-buffer man-buffer) ))
      (man *curr-man*)
      (edman)
      (kill-buffer "*Buffer List*") )))

Править

Эта версия upman надо надеяться, более стабильно. Отметьте введение нового глобального.

(defun upman ()
  "update the current work-in-progress man page"
  (interactive)
  (if (get-buffer *curr-man-file*) (save-buffer))
  (let ((man-buffer (format "*Man %s*" *curr-man*)))
    (if (get-buffer man-buffer) (kill-buffer man-buffer))
    (man *curr-man*)
    (edman) ))
9
20.12.2013, 04:00
2 ответа

Да, используйте tr вместо этого:

tr 'a' 'b' < file.txt > output.txt

sed соглашения в строках так огромная строка вызовут его проблемы. Я ожидаю, что это объявляет, что переменная внутренне остается на линии, и Ваш вход превышает максимальный размер, выделенный той переменной.

tr с другой стороны, соглашения с символами и должны смочь обработать произвольно длинные линии правильно.

10
27.01.2020, 20:06
  • 1
    Любопытно я просто создал файл 250 МБ заполненный w/"abcabc..." и смог сделать sed -e "s/a/z/g" b.txt > c.txt без любых проблем. Используя sed (GNU sed) 4.2.2. –  slm♦ 19.12.2013, 06:24
  • 2
    @slm то же здесь на 496M файл и то же sed версия, угадайте, что она зависит от реализации или аппаратных средств. –  terdon♦ 19.12.2013, 13:12
  • 3
    Да, если у меня было глупцу предположение, мы имеем дело с более старой версией sed. –  slm♦ 19.12.2013, 14:24

Исторические версии sed и awk имели проблемы памяти, они были главным образом зафиксированы в более поздних версиях, но одни из классических случаев этой проблемы поразили Larry Wall довольно трудно. его ответ должен был записать новый язык программирования - без пределов памяти кроме аппаратных средств. Он назвал это жемчугом. Ваша определенная проблема может быть решена проще, но общее эмпирическое правило, которое я использую, - когда sed не будет использовать жемчуг.

Править: запросом пример:

perl -pe "s/a/b/g" < one-line-250-mb.txt

или для меньшего количества использования памяти:

perl -e 'BEGIN{$/=\32768}' -pe "s/a/b/g" < one-line-250-mb.txt
4
27.01.2020, 20:06
  • 1
    Этот целый абзац сводится к "Perl".. Некоторые детали были бы хороши, или по крайней мере пример или что-то, что –  Michael Mrozek♦ 20.12.2013, 01:11
  • 2
    @MichaelMrozek я понимаю, что набор шляпы действительно ухаживает за выводом к roboediting, но я полагал с Вашей репутацией, что Вы обратите немного более близкое внимание. Конкретно в этом определенная проблема была уже решена очень узким способом, который не поможет большинству людей, ищущих, таким образом, я добавил ответ для общего случая. расширенный ответ, который я предоставил, поможет Nicolas Raoul, Если бы уже не было осуществимого решения, но я сомневаюсь, что Это помогло бы очень многим другим, тогда как мой исходный ответ поможет всем, кто достиг пределов sed. Если Вы не согласитесь, то я удалю –  hildred 20.12.2013, 01:50
  • 3
    @hildred я не думаю, что это слишком много, чтобы попросить, чтобы Вы могли принять добросовестность модераторов, когда они делают действительные комментарии к Вашему ответу, не обратившись сразу к обвинениям в скрытых мотивах (шляпы, действительно?!). –  Chris Down 20.12.2013, 05:13
  • 4
    @ChrisDown Наоборот - я нахожусь в нем полностью для шляп. Также это было отмечено как не ответ нескольких человек, но это - удаленная вторая по важности задача к шляпам –  Michael Mrozek♦ 20.12.2013, 05:16

Теги

Похожие вопросы