如何使用VS或Sed替换大文件中方括号内的空格为","
需求说明
仅替换文本中方括号(即JSON数组包裹符[])内部的所有空格,替换目标为",",不改动方括号外部的空格内容,要求方案可稳定支持大体积文件处理,优先适配Visual Studio、Sed两款工具。
转换效果参考:
原文本片段
"NIST 800-171A": ["3.11.2[a] 3.11.2 3.11.2[c] 3.11.2[d] 3.11.2[e] 3.11.3[a] 3.11.3"],
处理后效果
"NIST 800-171A": ["3.11.2[a]","3.11.2","3.11.2[c]","3.11.2[d]","3.11.2[e]","3.11.3[a]","3.11.3"],
Visual Studio 解决方案
Visual Studio对大文件的文本处理做了内存优化,GB级文件也可稳定运行,操作步骤如下:
- 打开Visual Studio,导入待处理文件
- 按快捷键
Ctrl+H调出查找替换面板,点击面板上的.*图标开启正则表达式匹配模式,勾选「匹配大小写」,取消「全字匹配」选项 - 「查找内容」输入框填入以下正则:
(\G(?!^)|(?<=: \["))((?:[^\[\]\s"]+|\[[^\]]+\])+)\s
- 「替换为」输入框填入以下内容:
$2","
- 先点击「查找下一个」,确认匹配的是方括号内部需要替换的空格,确认无误后点击「全部替换」即可完成处理。
注意:操作前建议备份原文件,避免误改无法回滚。
Sed 解决方案
Sed作为流处理工具,处理文件时不会把全量内容加载到内存,超大文件运行稳定性极强,操作步骤如下:
- 打开终端,进入待处理文件所在目录
- 执行以下命令,将
待处理文件.txt替换为你的实际文件名,结果会输出到处理后文件.txt:
sed -E ':a; s/(\[".*)\s(.*"\])/\1","\2/; ta' 待处理文件.txt > 处理后文件.txt
- 命令逻辑说明:定义循环标签,每次匹配
["和"]之间的最后一个空格替换为",",循环执行直到当前行没有可替换的空格再处理下一行,不会误改方括号外的空格内容,支持任意层数的无空格嵌套方括号场景。
注意:如果是macOS系统,需要将sed替换为gsed(可通过brew install gnu-sed安装),系统自带sed的扩展正则逻辑存在差异。
内容的提问来源于stack exchange,提问作者Sam Al Shami
相关产品推荐
相关产品推荐

