在文本文件列表中,我需要用文件名替换一个标记。
有一种简单的方法吗?对我来说首选的工具是notepad ++,但grep,python,powershell或其他方式也可以。我在窗户上工作。
示例:
文件名
contact.aspx
的Default.aspx
内容第一个文件
Hallo<%= Html.Resource(“Title”)%>
内容第二档
怎么了<%= Html.Resource(“Title”)%>
所需的结果是:
第一个文件
Hallo<%= Resource.contact_aspx.Title%>
第二档
怎么了<%= Resource.default_aspx.Title%>
我不需要这里的完整解决方案:只有让我在替换语句中使用文件名的部分才能让我开始。
答案 0 :(得分:1)
您可以使用fileinput模块。有一些模块重定向标准输出感觉有点尴尬,但它应该像这样工作:
#usage: python thisscript.py token file file2 file3
import sys
from fileinput import input
token = sys.argv[1]
file_input = input(sys.argv[2:], inplace=True)
for line in file_input:
print line.replace(token, file_input.filename())
答案 1 :(得分:0)
如果您可以使用awk
,那么这可能会有所帮助 -
awk -v FS="%" -v OFS="%" '
/Html.Resource\("Title"\)/{sub(/.*/,"= Resource."FILENAME".Title ",$2); print;next}1
' Input_File
上述单行将字段分隔符和输出字段分隔符设置为%
。查找包含模式/Html.Resource\("Title"\)/
的行。如果找到它,它将运行用$ strong替换$ 2列的操作 FILENAME (这是一个包含文件名的内置变量)并打印它并移动到下一行。 1
适用于不包含模式的行并按原样打印。
<强>测试强>
[jaypal:~/Temp] cat default.aspx
Whats up <%= Html.Resource("Title") %>
[jaypal:~/Temp] awk -v FS="%" -v OFS="%" '
> /Html.Resource\("Title"\)/{sub(/.*/,"= Resource."FILENAME".Title ",$2); print;next}1
> ' default.aspx
Whats up <%= Resource.default.aspx.Title %>
[jaypal:~/Temp] cat contact.aspx
Hallo <%= Html.Resource("Title") %>
[jaypal:~/Temp] awk -v FS="%" -v OFS="%" '
> /Html.Resource\("Title"\)/{sub(/.*/,"= Resource."FILENAME".Title ",$2); print;next}1
> ' contact.aspx
Hallo <%= Resource.contact.aspx.Title %>
答案 2 :(得分:0)
我借鉴了:https://stackoverflow.com/a/39110/1104941
将此脚本另存为.py文件。将它放在与您想要修改的.aspx文件相同的目录中(显然将原件放在安全的地方)。
import os
from tempfile import mkstemp
from shutil import move
dir_list=os.listdir('.')
for fname in dir_list:
if fname.split('.')[1] == 'aspx':
#Create temp file
fh, abs_path = mkstemp()
new_file = open(abs_path,'w')
old_file = open(fname, 'r')
for line in old_file:
if '<%= Html.Resource("Title") %>' in line:
new_line = line.replace('<%= Html.Resource("Title") %>', '<%= Resource.' + '_'.join(fname.split('.')) + '.Title %>')
new_file.write(new_line)
else:
new_file.write(line)
#close temp file
new_file.close()
os.close(fh)
old_file.close()
#Remove original file
os.remove(fname)
#Move new file
move(abs_path, fname)
答案 3 :(得分:0)
以下正则表达式通常会替换Html.Resource,您可以使用python的open(...)和os.path utils来遍历和跟踪文件名,以便在sub的第二个参数中使用。因此,src将是您从re.sub return
写回的文件的内容import re
fn = 'contact_aspx'
src = '<%= Html.Resource("Title") %>'
re.sub(r'<%= Html.Resource\("(.*)"\) %>', \
r'<%= Resource.{0}.\1 %>'.format(fn), \
src)
# outputs
# '<%= Resource.contact_aspx.Title %>'
答案 4 :(得分:0)
以下是Powershell中的解决方案:
(Get-Content -Path contact.aspx) -replace '(Hallo\s?<%=\s?)(.+?)(\s?%>)', '$1Resource.contact_aspx.Title$3' | Set-Content -Path contact.aspx
(Get-Content -Path default.aspx) -replace '(Whats\s?up\s?<%=\s?)(.+?)(\s?%>)', '$1Resource.default_aspx.Title$3' | Set-Content -Path default.aspx