Как искать текст файла шаблон и заменить его данным значением

Этот демонстрация вид делает это путем помещения календаря по текстовому полю, таким образом, Вы не можете ввести в нем. Можно также установить поле ввода на только для чтения в HTML, чтобы быть уверенными.


115
задан the Tin Man 11 May 2017 в 18:58
поделиться

3 ответа

Заявление об отказе от ответственности: Этот подход является наивной иллюстрацией возможностей ruby, а не производственным решением для замены строки в файлах. Это' s подвержены различным сценариям сбоев, таким как потеря данных в случае сбоя, прерывания или переполнения диска. Этот код не годится ни для чего, кроме быстрого одноразового скрипта, в котором создается резервная копия всех данных. По этой причине не копируйте этот код в свои программы.

Вот краткий способ сделать это.

file_names = ['foo.txt', 'bar.txt']

file_names.each do |file_name|
  text = File.read(file_name)
  new_contents = text.gsub(/search_regexp/, "replacement string")

  # To merely print the contents of the file, use:
  puts new_contents

  # To write changes to the file, use:
  File.open(file_name, "w") {|file| file.puts new_contents }
end
187
ответ дан 24 November 2019 в 02:19
поделиться

На самом деле нет способа редактировать файлы на месте. Что вы обычно делаете, когда это может сойти с рук (например, если файлы не слишком большие), так это считывание файла в память ( File.read ), выполнение ваших замен в строке чтения ( String # gsub ), а затем запишите измененную строку обратно в файл ( File.open , File # write ).

Если файлы достаточно большие чтобы это было невозможно, вам нужно прочитать файл по частям (если шаблон, который вы хотите заменить, не будет охватывать несколько строк, то один фрагмент обычно означает одну строку - вы можете использовать File.foreach , чтобы прочитать файл построчно), и для каждого фрагмента выполните в нем замену и добавьте его во временный файл. Когда вы закончите перебирать исходный файл,

11
ответ дан 24 November 2019 в 02:19
поделиться

На самом деле в Ruby есть функция редактирования на месте. Как и Perl, вы можете сказать

ruby -pi.bak -e "gsub(/oldtext/, 'newtext')" *.txt

. Это применит код в двойных кавычках ко всем файлам в текущем каталоге, имена которых заканчиваются на «.txt». Резервные копии редактируемых файлов будут создаваться с расширением «.bak» (думаю, «foobar.txt.bak»).

ПРИМЕЧАНИЕ: похоже, это не работает для многострочного поиска. Для них вы должны сделать это другим, менее красивым способом, с помощью сценария-оболочки вокруг регулярного выражения.

100
ответ дан 24 November 2019 в 02:19
поделиться
Другие вопросы по тегам:

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