我正在寻找一种方法来替换目录中许多文档中的第 5 行和第 7 行。第 5 行的偏移量和第 7 行的值对于每个文档都是不同的,但是我需要它们始终设置为 0。这意味着第 5 行在所有文档中都应该看起来像“color_stream_offset”:0,“,而第 7 行在所有文档中都应该看起来像“flags”:0,“。
我尝试过使用 SED、Notepad++,但似乎都没有用。每个文档都有差异,所以我不能直接复制文件。
这是需要替换的众多文件之一:
{
"data": {
"mesh": {
"color_stream_count": 0,
"color_stream_offset": 105920,
"cull_distance": 1.0000000150474662e+30,
"flags": 136,
"lightmap_motifs": [
0,
0,
0,
0
],
"lightmap_names": [],
"lightmap_offsets": [
0,
0,
0,
0
],
"mesh_name": "gomcbldf_00",
"mesh_offset": 18172,
"py/object": "lib.init_classes.Mesh",
"tint": {
"dimensions": 3,
"py/object": "lib.ma_util.Vector",
"x": 1.0,
"y": 1.0,
"z": 1.0
}
},
"offset": 989012
},
"py/object": "lib.init_classes.ShapeData",
"shape_type": "FWORLD_SHAPETYPE_MESH"
}
答案1
我发布以下解决方案作为实用解决方案。为了简化它,您可以分两步进行。请注意 - 请制作备份副本所有文件的首位。
我假设您的文件例如file-1.txt
都有file-2.txt
扩展名 *.txt 并且驻留在文件夹中例如工作区:\_working:
- 首次开放一使用 Notepad++ 处理工作目录中的文件
- Ctrl+ Shift+F
- 前往在文件中查找标签
- 找什么:
(.+)("color_stream_offset": )([0-9]{6}\,)
- 用。。。来代替:
\1\20,
- 筛选器:
*.txt
- 目录:例如 D:\_working
- 查看
Match case
- 搜索模式:
Regular expression
- 点击Replace in Files
- OK当您确实确定时请单击。
第二步,将“查找内容”字符串编辑为:(.+)("flags": )([0-9]{3}\,)
,然后单击Replace in Files。
{6}
请注意正则表达式搜索字符串中的空格,如果此处的长度不同,请更改搜索字符串中的数字。
答案2
这只需一步即可完成:
- Ctrl+ Shift+F
- 找什么:
(?:"color_stream_offset":|"flags":)\h*\K\d+
- 用。。。来代替:
0
- 筛选器:
Whatever you want
- 目录:
Path\where\your\files\are
- 查看 正则表达式
- Replace in Files
解释:
(?: # non capture group
"color_stream_offset": # literally
| # OR
"flags": # literally
) # end group
\h* # 0 or more horizontal spaces
\K # forget all we've seen until this position
\d+ # 1 or more digits
截屏: