替换2个字符串之间的文本

时间:2015-10-27 10:35:59

标签: python bash sed

我尝试使用Python或sed替换2个字符串之间的文本。我阅读了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
    
  3. 我的目标是使用//Start中的内容替换//Enddst.txtCourses.txt之间的内容。

    我看了一眼:

    但无法使用它们。

3 个答案:

答案 0 :(得分:1)

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

说明:

  • 使用与默认\#//^Start#,\#//^End#不同的分隔符\# start end /)之间的所有内容,执行sub {}内的行动
    • 除了 end \#^//end# !)之外的所有行,删除行(d)[并循环到下一行]
    • [如果不是这样,那么包含 end ],替换为(读取)文件的内容Course.txt

答案 1 :(得分:1)

 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)

答案 2 :(得分:0)

我知道这很晚,但是这是我的解决方案: 请注意,这将覆盖原始文件的内容,因此请确保将其备份

f = open("test.txt","r")
lines = f.readlines()
f.close()
f = open("test.txt","w")
start=False
for line in lines:
    if line.strip() == "starting string":
        f.write(line)
        start=True
    elif line.strip() == "ending string":
        f.write("line1 content\nline2 content\n")
        start=False
    if start == False:
        f.write(line)
f.close()