[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
要用到所谓的"零宽断言"才能实现,不知道 fr.exe 支不支持
在 UltraEdit 中,选替换
正则选
  1. ^.*?("path":(?:(?!"path":).)*\\\\browser\\\\features).*$
复制代码
替换为选 \1
正则勾选 Perl

TOP

本帖最后由 WHY 于 2022-12-15 10:44 编辑
  1. @echo off
  2. REM 替换 D:\\Firefox106 为当前脚本路径
  3. set "p=%~dp0"
  4. PowerShell "$arr = (gc -Literal '%~dp0extensions.json' -Enc UTF8 -ReadCount 0) -replace '(?<=\"path\":\")(?:(?!\"path\":\").)*(?=Profiles\\\\extensions|browser\\\\features)', '%p:\=\\%'; sc -Literal '%~dp0Result.json' -Value $arr -Enc UTF8"
  5. pause
复制代码
Test.ps1
  1. #替换 D:\\Firefox106 为当前当前脚本路径
  2. #需PowerShell v3.0及以上版本
  3. $MyPath = $MyInvocation.MyCommand.Path -replace '\\[^\\]+$', '\';
  4. $json = gc -Literal ($MyPath + 'extensions.json') -Raw -Enc utf8 | ConvertFrom-Json;
  5. forEach( $obj In $json.addons ){
  6.     $path = $obj.path -replace '^.*?\\(?=Profiles\\extensions|browser\\features)', $MyPath;
  7.     $obj.path = $path;
  8. }
  9. $json | ConvertTo-Json -Depth 10 | sc -Literal ($MyPath + 'Result.json') -Enc utf8;
复制代码

TOP

回复 16# kidzgy


    确实,少加了一个双引号。
  1. (?=Profiles\\\\extensions|browser\\\\features)
复制代码
  1. (?:Profiles\\\\extensions|browser\\\\features)
复制代码
是有区别的

TOP

本帖最后由 WHY 于 2022-12-15 10:43 编辑

回复 18# kidzgy


    12楼仅仅是示例,可以无视。这样即可:
  1. (?<="path":")(?:(?!"path":").)*(?=Profiles\\\\extensions|browser\\\\features)
复制代码

TOP

gawk 肯定可以的,毋庸置疑。不过,好多好多斜杠啊
http://bcn.bathome.net/tool/4.1.0/gawk.exe
  1. @echo off
  2. set "p=%~dp0"
  3. gawk "{print $0=gensub(/(\"path\":\")[^^\"]+(Profiles\\\\extensions|browser\\\\features)/,\"\\1%p:\=\\\\\\\\%\\2\",\"g\")}" extensions.json > a.json
  4. pause
复制代码

TOP

本帖最后由 WHY 于 2022-11-28 21:59 编辑

回复 26# kidzgy


    set "p=%~dp0"
这一句你丢了,并且要存为bat脚本文件运行

TOP

回复 29# kidzgy


    比如,把 1.txt 中的 abc 改成 xyz
  1. gawk -v "IGNORECASE=1" "{print $0=gensub(/abc/,\"xyz\",\"g\")>\"1.txt\"}" 1.txt
复制代码

TOP

返回列表