2015-10-27 2 views
-4

Я пытаюсь заменить текст между двумя строками, используя Python или sed. Я прочитал все, что я нашел в Stack Overflow, но моих навыков, похоже, недостаточно, чтобы адаптировать то, что я нашел к моей проблеме.Заменить текст между двумя строками

У меня есть 2 файла:

  1. Courses.txt:

    Course = bla 
    Room number(1) 
    url http://foobar 
    
  2. dst.txt:

    //Start 
    
    Course = foo 
    Room Number(2) 
    url http://bar 
    
    //End 
    

Моя цель состоит в том, чтобы заменить то, что находится между //Start и //End в dst.txt с тем, что читается в Courses.txt.

Я смотрел здесь:

, но не был в состоянии использовать их.

ответ

0
import re 
with open('Courses.txt', 'r') as f1, open('dst.txt', 'r') as f2: 
     text = f1.read() 
     text2 = f2.read() 
     ntext = re.sub(r'(//Start.*?\n+)(.*)(//End)',r'\1' + text + r'\3',text2, flags=re.M|re.DOTALL) 

    with open('dst.txt', 'w') as fout: 
     fout.write(ntext) 
+0

Большое спасибо! Работал как шарм! не могли бы вы объяснить: ntext = re.sub (r '// Start. * // End', text, text2, flags = re.M | re.DOTALL) – Processor

+0

Я кричу «Победа» слишком рано, но на самом деле это замените // Start и // End тоже, тогда как мне нужно только заменить текст между этими строками. – Processor

+0

Извините, не хватает '' 'на курсах.txt, а второй' end' был 'End' – NeronLeVelu

1
sed '\#^//Start#,\#^//End#{ 
    \#^//End# !d 
    r Courses.txt 
    }' dst.txt 

Объяснение:

  • для каждой вещи между начала и конца (\#//^Start#,\#//^End#) с использованием другого разделителя \#, чем по умолчанию /, выполнить суб действие внутри {}
    • для всех line кроме конец (\#^//end# !), удалить строку (d) [и цикл к следующей строке]
    • [если не так, поэтому содержат конец], заменить (читать) содержание файла Course.txt
+0

Hi NeronLeVelu, Прежде всего, спасибо за ваш ответ. Затем я просто копирую/мимо вашего ответа, и у меня просто было эхо того, что есть в dst.txt, но ничего не заменилось. – Processor

+0

Эхо было связано с моей ошибкой, но, к сожалению, для меня, после исправления, код ничего не сделал. – Processor

Смежные вопросы