我不确定是否可以用sed做我需要的事。
我希望能够用列表中的另一个字符串替换文件中的字符串,并为每个版本创建一个单独的副本。
例如,原始文件包含:
dog
我想用不同单词列表替换apple dog orange
。即猫,兔子,鸭子。
这将创建原始文件的副本,每个副本都有不同的更改。
File1.txt(原始文件) - apple cat orange
File2.txt - apple rabbit orange
File3.txt - apple duck orange
File4.txt - sed -i '' 's/dog/cat/g' *.html
我已经能够使用Sed来查找和替换单个文件:
lessc-each
我需要一种从列表中替换的方法,并为每个列表创建一个唯一的副本。
我在OSX上。正如我之前所说,sed可能不是这里使用的工具,也许是Python?我愿意接受任何建议。
由于
答案 0 :(得分:2)
你可以使用正则表达式使用python做到这一点。
import re
import os
filename = '/path/to/filename.txt'
with open(filename, 'r') as f:
text = f.read()
names = ['cat', 'rabbit', 'duck']
for i, name in enumerate(names):
new_text = re.sub(r'dog', name, text)
base, ext = os.path.splitext(filename)
with open('{}_{}{}'.format(base, i, ext), 'w') as f:
f.write(new_text)
答案 1 :(得分:1)
您可以使用正则表达式
import re
in_file = 'File1.txt'
out_file = 'File2.txt'
with open(filename, 'r') as in_f:
s = f.read() # Reads whole file. Be careful for large files
s = re.sub('dog', 'cat', s)
with open(out_file, 'w') as out_f:
f.write(s)
您可以将整个内容放在for
循环中,以根据需要进行多次替换
答案 2 :(得分:1)
你可以简单地使用字符串替换方法
import string
f = open("file1")
text = f.read()
list_of_words = ['cat','rabbit','duck']
num =2
for word in list_of_words:
new_text = string.replace(text,"dog",word,1)
f_new = open("file"+str(num),"w")
f_new.write(new_text)
f_new.close()
num +=1
输入: 文件1
apple dog orange
输出:file2:
apple cat orange
输出:file3:
apple rabbit orange
输出:file4:
apple duck orange