替换多个文本文件中的字符串

替换多个文本文件中的字符串

我正在寻找一种方法来替换目录中许多文档中的第 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

截屏:

在此处输入图片描述

相关内容