找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 21664|回复: 19

[文本处理] 【已解决】sed.exe替换字符,还能够精简吗?谢谢

[复制链接]
发表于 2025-3-14 09:50:46 | 显示全部楼层 |阅读模式
本帖最后由 yyz219 于 2025-3-15 10:14 编辑

完美解决了:
方法1
::去 SID(任意位数的 SID 都适用)
  1. sed.exe -i -E "s/HKEY_USERS\\S-1-5-21[^\\]*\\/HKEY_CURRENT_USER\\/g" "%注册表文件路径%"
复制代码
方法2

  1. ::去 SID(任意位数的 SID 都适用)【S-1-5-21后面由 “数字” 和 “-” 号组成,由此用:[0-9\-]】
  2. sed -i -E "s/HKEY_USERS\\S-1-5-21[0-9\-]*\\/HKEY_CURRENT_USER\\/g" "%注册表文件路径%"
复制代码
=================================================================
成品.bat
:
  1. :【自动去 sid(拖动)】【转换成的(.reg)是(ANSI 编码)】
  2. @echo off
  3. ::=============================================================================================
  4. ::【双击退出,拖运行】
  5. if "%~1"=="" exit /b 3
  6. ::=============================================================================================
  7. set 注册表文件路径=%~1
  8. ::=============================================================================================
  9. ::【检测 “关键字”:HKEY_USERS\S-1-5-21(有跳到:D,无跳到:C)】
  10. type "%注册表文件路径%"|findstr "HKEY_USERS\S-1-5-21" >nul 2>&1
  11. if %errorlevel% equ 0 (goto :D) else goto :C
  12. :C
  13. echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo. %【留下 10个 空行】%
  14. echo                                  不需要替换
  15. pause>nul
  16. exit
  17. :D
  18. echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo. %【留下 10个 空行】%
  19. echo                                   要替换吗?
  20. pause>nul
  21. ::=============================================================================================
  22. ::【转为:ANSI 编码(才不乱码)】
  23. (type "%注册表文件路径%" &echo.;需有中文)>>"ANSI.#" &move /y "ANSI.#" "%注册表文件路径%">nul
  24. ::=============================================================================================
  25. ::去 SID(任意位数的 SID 都适用)【S-1-5-21后面由 “数字” 和 “-” 号组成,由此用:[0-9\-]】
  26. sed -i -E "s/HKEY_USERS\\S-1-5-21[0-9\-]*\\/HKEY_CURRENT_USER\\/g" "%注册表文件路径%"
  27. exit
复制代码
===============================
原来的问题:
sed.exe替换字符,还能够精简吗?谢谢
========================
sed.exe替换字符.bat
这些代码能够使用。但是,觉得行数有一点多,不知道能不能减少?
::【自动去 sid】
@echo off
... ...
::====================================================================
::去 "注册表文件"中的SID(数字和 “.” 的位数  要等于sid的位数  不等于就不会处理)(下面sid-40~48位适用
sed.exe -i -E -e "s/HKEY_USERS\\S-1-5-21................................\\/HKEY_CURRENT_USER\\/g"  "%注册表文件路径%"
sed.exe -i -E -e "s/HKEY_USERS\\S-1-5-21.................................\\/HKEY_CURRENT_USER\\/g"  "%注册表文件路径%"
sed.exe -i -E -e "s/HKEY_USERS\\S-1-5-21..................................\\/HKEY_CURRENT_USER\\/g"  "%注册表文件路径%"
sed.exe -i -E -e "s/HKEY_USERS\\S-1-5-21...................................\\/HKEY_CURRENT_USER\\/g"  "%注册表文件路径%"
sed.exe -i -E -e "s/HKEY_USERS\\S-1-5-21....................................\\/HKEY_CURRENT_USER\\/g"  "%注册表文件路径%"
sed.exe -i -E -e "s/HKEY_USERS\\S-1-5-21.....................................\\/HKEY_CURRENT_USER\\/g"  "%注册表文件路径%"
sed.exe -i -E -e "s/HKEY_USERS\\S-1-5-21......................................\\/HKEY_CURRENT_USER\\/g"  "%注册表文件路径%"
sed.exe -i -E -e "s/HKEY_USERS\\S-1-5-21.......................................\\/HKEY_CURRENT_USER\\/g"  "%注册表文件路径%"
sed.exe -i -E -e "s/HKEY_USERS\\S-1-5-21........................................\\/HKEY_CURRENT_USER\\/g"  "%注册表文件路径%"

exit
====================================================================
这些代码能够使用。但是,觉得行数有一点多,不知道能不能减少?
贴个注册表文件,供测试

Windows Registry Editor Version 5.00

[HKEY_USERS\S-1-5-21-2765962963-2952424663-14726149-500\Software\Microsoft\Windows\CurrentVersion\Explorer\Taskband]
[HKEY_CURRENT_CONFIG\Software\Fonts]
"LogPixels"=dword:00000060

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2025-3-14 11:57:32 | 显示全部楼层
代码精简不清楚,不过注册表的五大根键名,可以采用缩写,如下
HKEY_LOCAL_MACHINE    简写HKLM
HKEY_CURRENT_USER     简写HKCU
HKEY_CLASSES_ROOT     简写HKCR
HKEY_USERS                  简写HKU
HKEY_CURRENT_CONFIG 简写HKCC

评分

参与人数 1技术 +1 收起 理由
yyz219 + 1 乐于助人

查看全部评分

 楼主| 发表于 2025-3-14 12:01:47 | 显示全部楼层
回复 2# fzp070


    谢谢
发表于 2025-3-14 12:56:01 | 显示全部楼层
本帖最后由 aloha20200628 于 2025-3-14 13:09 编辑

回复 1# yyz219

假设被替换的32-40字符链仅由数字和.构成

  1. sed -E "s/HKEY_USERS\\S-1-5-21[0-9\.]{32,40}\\/HKEY_CURRENT_USER\\/ig" "%注册表文件路径%"
复制代码
【修改注册表须谨慎】

评分

参与人数 1技术 +1 收起 理由
yyz219 + 1 乐于助人

查看全部评分

 楼主| 发表于 2025-3-14 17:50:27 | 显示全部楼层
回复 4# aloha20200628


    我试一试先 谢谢
 楼主| 发表于 2025-3-14 18:06:25 | 显示全部楼层
回复 4# aloha20200628

不成功(没有进行替换)
 楼主| 发表于 2025-3-14 19:05:14 | 显示全部楼层
贴个注册表文件,供测试

Windows Registry Editor Version 5.00

[HKEY_USERS\S-1-5-21-2765962963-2952424663-14726149-500\Software\Microsoft\Windows\CurrentVersion\Explorer\Taskband]
[HKEY_CURRENT_CONFIG\Software\Fonts]
"LogPixels"=dword:00000060
发表于 2025-3-14 19:26:15 | 显示全部楼层
本帖最后由 aloha20200628 于 2025-3-14 19:32 编辑

回复 7# yyz219

提供的样本文件中的 32-40字符链包含的不是.字符而是-字符,故4楼代码须订正如下

  1. sed -E "s/HKEY_USERS\\S-1-5-21[0-9\.\-]{32,40}\\/HKEY_CURRENT_USER\\/ig" "%注册表文件路径%"
复制代码
如果要被替换的这段32-40字符链仅包含数字和.-这两个非数值字符,亦可用以下代码,其自动兼容 1-n 个字符长度...

  1. sed -E "s/HKEY_USERS\\S-1-5-21[0-9\.\-]+\\/HKEY_CURRENT_USER\\/ig" "%注册表文件路径%"
复制代码

评分

参与人数 1技术 +1 收起 理由
yyz219 + 1 谢谢

查看全部评分

 楼主| 发表于 2025-3-14 19:30:25 | 显示全部楼层
回复 8# aloha20200628


    一样不行(没有替换),是不是跟“S-1-5-21”————有一个“S”有关系
发表于 2025-3-14 19:40:14 | 显示全部楼层
回复 9# yyz219

代码中匹配的是 S-1-5-21 其后的 -2765962963-2952424663-14726149-500 字符链,我测试没有问题。
发表于 2025-3-14 19:45:44 | 显示全部楼层
  1. sed.exe -i -E "s/HKEY_USERS\\S-1-5-21[^\\]*\\/HKEY_CURRENT_USER\\/g" "%注册表文件路径%"
复制代码

评分

参与人数 1技术 +1 收起 理由
yyz219 + 1 乐于助人

查看全部评分

 楼主| 发表于 2025-3-14 19:46:29 | 显示全部楼层
回复 10# aloha20200628


    代码是什么?
 楼主| 发表于 2025-3-14 19:47:48 | 显示全部楼层
回复 11# smss

我试一试 谢谢
 楼主| 发表于 2025-3-14 19:51:09 | 显示全部楼层
回复 11# smss


    成功了,再次感谢
发表于 2025-3-14 19:51:46 | 显示全部楼层
回复 12# yyz219

直接在命令行测试以下这行,看看是啥结果?

  1. C:\temp>echo,[HKEY_USERS\S-1-5-21-2765962963-2952424663-14726149-500\Software\Microsoft\Windows\CurrentVersion\Explorer\Taskband]|sed -E "s/HKEY_USERS\\S-1-5-21[0-9\.\-]+\\/HKEY_CURRENT_USER\\/ig"
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 07:29 , Processed in 0.023904 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表