我尝试使用Python或sed替换2个字符串之间的文本。我阅读了Stack Overflow上发现的所有内容,但我的技能似乎不足以使我发现的问题适应我的问题。
我有2个文件:
Courses.txt:
Course = bla
Room number(1)
url http://foobar
dst.txt:
//Start
Course = foo
Room Number(2)
url http://bar
//End
我的目标是使用//Start
中的内容替换//End
中dst.txt
和Courses.txt
之间的内容。
我看了一眼:
但无法使用它们。
答案 0 :(得分:1)
sed '\#^//Start#,\#^//End#{
\#^//End# !d
r Courses.txt
}' dst.txt
说明:
\#//^Start#,\#//^End#
不同的分隔符\#
, start 和 end (/
)之间的所有内容,执行sub {}
内的行动
\#^//end# !
)之外的所有行,删除行(d
)[并循环到下一行] 答案 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()