
标题: [文本处理] 【已解决】sed.exe替换字符,还能够精简吗?谢谢 [打印本页]
作者: yyz219 时间: 2025-3-14 09:50 标题: 【已解决】sed.exe替换字符,还能够精简吗?谢谢
本帖最后由 yyz219 于 2025-3-15 10:14 编辑
完美解决了:
方法1
::去 SID(任意位数的 SID 都适用)- sed.exe -i -E "s/HKEY_USERS\\S-1-5-21[^\\]*\\/HKEY_CURRENT_USER\\/g" "%注册表文件路径%"
复制代码
方法2- ::去 SID(任意位数的 SID 都适用)【S-1-5-21后面由 “数字” 和 “-” 号组成,由此用:[0-9\-]】
- sed -i -E "s/HKEY_USERS\\S-1-5-21[0-9\-]*\\/HKEY_CURRENT_USER\\/g" "%注册表文件路径%"
复制代码
=================================================================
成品.bat
:- :【自动去 sid(拖动)】【转换成的(.reg)是(ANSI 编码)】
- @echo off
- ::=============================================================================================
- ::【双击退出,拖运行】
- if "%~1"=="" exit /b 3
- ::=============================================================================================
- set 注册表文件路径=%~1
- ::=============================================================================================
- ::【检测 “关键字”:HKEY_USERS\S-1-5-21(有跳到:D,无跳到:C)】
- type "%注册表文件路径%"|findstr "HKEY_USERS\S-1-5-21" >nul 2>&1
- if %errorlevel% equ 0 (goto :D) else goto :C
- :C
- echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo. %【留下 10个 空行】%
- echo 不需要替换
- pause>nul
- exit
- :D
- echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo. %【留下 10个 空行】%
- echo 要替换吗?
- pause>nul
- ::=============================================================================================
- ::【转为:ANSI 编码(才不乱码)】
- (type "%注册表文件路径%" &echo.;需有中文)>>"ANSI.#" &move /y "ANSI.#" "%注册表文件路径%">nul
- ::=============================================================================================
- ::去 SID(任意位数的 SID 都适用)【S-1-5-21后面由 “数字” 和 “-” 号组成,由此用:[0-9\-]】
- sed -i -E "s/HKEY_USERS\\S-1-5-21[0-9\-]*\\/HKEY_CURRENT_USER\\/g" "%注册表文件路径%"
- 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
作者: fzp070 时间: 2025-3-14 11:57
代码精简不清楚,不过注册表的五大根键名,可以采用缩写,如下
HKEY_LOCAL_MACHINE 简写HKLM
HKEY_CURRENT_USER 简写HKCU
HKEY_CLASSES_ROOT 简写HKCR
HKEY_USERS 简写HKU
HKEY_CURRENT_CONFIG 简写HKCC
作者: yyz219 时间: 2025-3-14 12:01
回复 2# fzp070
谢谢
作者: aloha20200628 时间: 2025-3-14 12:56
本帖最后由 aloha20200628 于 2025-3-14 13:09 编辑
回复 1# yyz219
假设被替换的32-40字符链仅由数字和.构成- sed -E "s/HKEY_USERS\\S-1-5-21[0-9\.]{32,40}\\/HKEY_CURRENT_USER\\/ig" "%注册表文件路径%"
复制代码
【修改注册表须谨慎】
作者: yyz219 时间: 2025-3-14 17:50
回复 4# aloha20200628
我试一试先 谢谢
作者: yyz219 时间: 2025-3-14 18:06
回复 4# aloha20200628
不成功(没有进行替换)
作者: yyz219 时间: 2025-3-14 19:05
贴个注册表文件,供测试
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
作者: aloha20200628 时间: 2025-3-14 19:26
本帖最后由 aloha20200628 于 2025-3-14 19:32 编辑
回复 7# yyz219
提供的样本文件中的 32-40字符链包含的不是.字符而是-字符,故4楼代码须订正如下- sed -E "s/HKEY_USERS\\S-1-5-21[0-9\.\-]{32,40}\\/HKEY_CURRENT_USER\\/ig" "%注册表文件路径%"
复制代码
如果要被替换的这段32-40字符链仅包含数字和.-这两个非数值字符,亦可用以下代码,其自动兼容 1-n 个字符长度...- sed -E "s/HKEY_USERS\\S-1-5-21[0-9\.\-]+\\/HKEY_CURRENT_USER\\/ig" "%注册表文件路径%"
复制代码
作者: yyz219 时间: 2025-3-14 19:30
回复 8# aloha20200628
一样不行(没有替换),是不是跟“S-1-5-21”————有一个“S”有关系
作者: aloha20200628 时间: 2025-3-14 19:40
回复 9# yyz219
代码中匹配的是 S-1-5-21 其后的 -2765962963-2952424663-14726149-500 字符链,我测试没有问题。
作者: smss 时间: 2025-3-14 19:45
- sed.exe -i -E "s/HKEY_USERS\\S-1-5-21[^\\]*\\/HKEY_CURRENT_USER\\/g" "%注册表文件路径%"
复制代码
作者: yyz219 时间: 2025-3-14 19:46
回复 10# aloha20200628
代码是什么?
作者: yyz219 时间: 2025-3-14 19:47
回复 11# smss
我试一试 谢谢
作者: yyz219 时间: 2025-3-14 19:51
回复 11# smss
成功了,再次感谢
作者: aloha20200628 时间: 2025-3-14 19:51
回复 12# yyz219
直接在命令行测试以下这行,看看是啥结果?- 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"
复制代码
作者: aloha20200628 时间: 2025-3-14 20:07
本帖最后由 aloha20200628 于 2025-3-14 20:13 编辑
回复 9# yyz219
这段正则匹配式很简单([0-9\.\-] 与 [^\\] 对匹配本帖是同效的),但楼主的测试结果成否表明与是否采用 -i 参数有关?这也许与 sed.exe 版本
... 本人用的是从本坛第三方下载的 sed 4.9版 sed (GNU sed) 4.9
作者: yyz219 时间: 2025-3-14 20:19
回复 15# aloha20200628
谢谢 辛苦了 谢谢
作者: yyz219 时间: 2025-3-14 21:39
本帖最后由 yyz219 于 2025-3-14 21:49 编辑
回复 16# aloha20200628
下面代码成功,谢谢- ::去 SID(任意位数的 SID 都适用)
- sed -i -E "s/HKEY_USERS\\S-1-5-21[0-9\-]*\\/HKEY_CURRENT_USER\\/g" "%注册表文件路径%"
复制代码
作者: aloha20200628 时间: 2025-3-15 12:06
本帖最后由 aloha20200628 于 2025-3-15 12:13 编辑
回复 18# yyz219
是的...其实就差一个参数 -i,不用此参数就不会自动修改源文件,须用重定向文件才可保存修改结果,用此参数即可直接修改源文件... 解答论坛各类问题要分门别类的选用相应的脚本和命令行工具,对这些五花八门的命令行参数真得细心 ‘管理’,跟大厨料理各式菜品,中医熟记各式药方一样
...
作者: yyz219 时间: 2025-3-15 12:37
回复 19# aloha20200628
谢谢你的帮助 谢谢
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |