我想替换所有"var_">
var_
Hello
var_
Whats
var_
Up?
...
使用此列表中的单词
alpha
beta
gamma
...
所以最终结果是
alpha
Hello
beta
Whats
gamma
Up?
...
将不胜感激,以帮助实现这一目标!
这对于正则表达式来说是不可能的/过于复杂。但是,如果您将其与编程语言结合使用,则可以快速完成它。例如,在python中,它看起来像这样:
import sys
import re
import fileinput
if len(sys.argv) < 3:
exit("Usage: " + sys.argv[0] + " <filename> <replacements>")
input_file = sys.argv[1]
replacements = sys.argv[2:]
num_of_replacements = len(replacements)
replacement_index = 0
searcher = re.compile("^var_\b")
for line in fileinput.input(input_file, inplace=True, backup='.bak'):
match = searcher.match(line)
if match is None:
print(line.rstrip())
else:
print(re.sub("^var_\b", line.rstrip(), replacements[replacement_index]))
replacement_index = replacement_index + 1
用法:replacer.py ExampleInput.txt alpha beta gamma
更新
可以修改程序以接受您搜索的字符串作为第一个参数:
replacer.py "var_" ExampleInput.txt alpha beta gamma
修改后的 python 脚本如下所示:
import sys
import re
import fileinput
if len(sys.argv) < 4:
exit("Usage: " + sys.argv[0] + " <pattern> <filename> <replacements>")
search = "\b" + sys.argv[1] + "\b"
input_file = sys.argv[2]
replacements = sys.argv[3:]
num_of_replacements = len(replacements)
replacement_index = 0
searcher = re.compile(search)
for line in fileinput.input(input_file, inplace=True, backup='.bak'):
match = searcher.match(line)
if match is None:
print(line.rstrip())
else:
print(re.sub(search, line.rstrip(), replacements[replacement_index]))
replacement_index = replacement_index + 1
注意:此脚本仍有一些限制:
- 它期望您搜索的字符串每行只出现一次。
- 仅当搜索到的字符串是不同的单词时,它才会替换搜索的字符串
- 您可能会意外地将任何 Python 正则表达式语法合并到
search
参数中