找回密码
 加入
搜索
查看: 7083|回复: 26

[网络通信] 【已解决】关于替换或删除文件中的部份字符的问题

[复制链接]
发表于 2020-1-27 20:39:28 | 显示全部楼层 |阅读模式
本帖最后由 anythinging 于 2020-2-4 12:12 编辑

各位大神,我想替换password 51:b:开始到后面的字符,大致知道应该用正则表达式来替换或删除,但目前还没有掌握,肯请指点替换和删除的方法(感觉可能先删除,再添加比较容易),谢谢!
这个是rdp文件,
文件名是default.rdp
文件中需要修改替换的内容:

password 51:b:01000000D08C9DDF0115D1118C7A00C04FC297EB010000000766BE1F58CCA44082BCC46C1A155B5A00000000020000000000106600000001000020000000DA6D8FE678773CE6C70D5B9A8DEBA5A721A0DF1423AC4623DB3E664BB290DFE5000000000E8000000002000020000000A35773E38EAC800BCA8AD6B6B86C683CA0DE054A11C51CF80875092B01C2CA7E2000000067BE91888738802AE683E91F3DCBCD4630B421CB31AC062405DF5171C387C4A0400000001F875ADDCF475F720C31A16C41E3E39F308DC329F48A32BA59C3127D163977E90EA37B30DCF73F7642626F59A8DC3673A051973B5AE697A3E0011413812EC12B

发表于 2020-2-1 20:16:23 | 显示全部楼层
Local $sSRERe = StringRegExpReplace($sSource, 'password.*\v+', '')

Local $sSRERe = StringRegExpReplace($sSource, 'password.*\v{2}', '')

都可以,自己看着调整吧

评分

参与人数 1金钱 +30 收起 理由
anythinging + 30 很给力!

查看全部评分

发表于 2020-1-28 15:47:01 | 显示全部楼层
Local $sSRERe = StringRegExpReplace($sSource, '(?is)(^.*51:b:)(.*)', '${1}' & $password)

Local $sSRERe = StringRegExpReplace($sSource, '(?im)(^.*51:b:)(.*)', '${1}' & $password)

评分

参与人数 1金钱 +30 收起 理由
anythinging + 30 很给力!

查看全部评分

发表于 2020-1-28 13:26:52 | 显示全部楼层

$sSource=FileRead(@desktopDir&"\default.rdp");假设存放路径在桌面;替换文件中的password 51:b:后的内容
MsgBox(262144, '原文内容', $sSource)

$file=FileOpen(@desktopDir&"\default.rdp", FileGetEncoding(@desktopDir&"\default.rdp") + 2);2 = 写入模式(先删除之前的内容)

$password = '12345678'
Local $sSRERe = StringRegExpReplace($sSource, '(?is)(^.*51:b:)(.*)', '${1}' & $password)
MsgBox(262144, '更改结果', $sSRERe)

FileWrite($file,$sSRERe)
FileClose($file)


评分

参与人数 1金钱 +30 收起 理由
anythinging + 30 赞一个!

查看全部评分

发表于 2020-1-27 22:10:22 | 显示全部楼层
不知道我理解的对不对?    将红色的全部删除?

password 51:b:01000000D08C9DDF0115D1118C7A00C04FC297EB010000000766BE1F58CCA44082BCC46C1A155B5A00000000020000000000106600000001000020000000DA6D8FE678773CE6C70D5B9A8DEBA5A721A0DF1423AC4623DB3E664BB290DFE5000000000E8000000002000020000000A35773E38EAC800BCA8AD6B6B86C683CA0DE054A11C51CF80875092B01C2CA7E2000000067BE91888738802AE683E91F3DCBCD4630B421CB31AC062405DF5171C387C4A0400000001F875ADDCF475F720C31A16C41E3E39F308DC329F48A32BA59C3127D163977E90EA37B30DCF73F7642626F59A8DC3673A051973B5AE697A3E0011413812EC12B

$sSource=FileRead(@desktopDir&"\default.rdp");假设存放路径在桌面
MsgBox(0, '原文内容', $sSource)

$file=FileOpen(@desktopDir&"\default.rdp",2);2 = 写入模式(先删除之前的内容)
Local $sSRERe = StringRegExpReplace($sSource, '(.*51:b:)(.*)', '\1')
FileWrite($file,$sSRERe)
MsgBox(0, '替换结果', $sSRERe)
;~ ConsoleWrite($sSRERe)
FileClose($file)

 楼主| 发表于 2020-1-27 22:30:23 | 显示全部楼层
本帖最后由 anythinging 于 2020-1-27 22:32 编辑

感谢回复,我按您的代码改了一下,好象没有效果。
我想把password 51:b:之后的这一行内容替换成新的密码内容比如$password。

$password = '12345678'

$sSource=FileRead(@ScriptDir&'\密码.rdp');假设存放路径在桌面
MsgBox(0, '原文内容', $sSource)

$file=FileOpen(@ScriptDir&'\密码.rdp',2);2 = 写入模式(先删除之前的内容)
Local $sSRERe = StringRegExpReplace($sSource, '(.51b)(.)', '1')
FileWrite($file,$sSRERe)
MsgBox(0, '替换结果', $sSRERe)
;~ ConsoleWrite($sSRERe)
FileClose($file)
比如
password 51:b:12345678
发表于 2020-1-27 23:08:25 | 显示全部楼层
本帖最后由 floor6ggg 于 2020-1-27 23:18 编辑
anythinging 发表于 2020-1-27 22:30
感谢回复,我按您的代码改了一下,好象没有效果。
我想把password 51:b:之后的这一行内容替换成新的密码内 ...

意思是将 我2楼标红色的部分,替换成 12345678 对吧?

如果是我的解法的话,个人会沿用3楼的先删除红色部分………… 之后再在原来的结果上 添加上 $password 变量
$sSource=FileRead(@desktopDir&"\密码.rdp");假设存放路径在桌面
MsgBox(0, '原文内容', $sSource)
$password = '12345678'
$file=FileOpen(@desktopDir&"\密码.rdp",2);2 = 写入模式(先删除之前的内容)
Local $sSRERe = StringRegExpReplace($sSource, '(.*51:b:)(.*)', '\1')
$sSRERe &=$password
FileWrite($file,$sSRERe)
MsgBox(0, '替换结果', $sSRERe)
;~ ConsoleWrite($sSRERe)
FileClose($file)
注意其中的写法: Local $sSRERe = StringRegExpReplace($sSource, '(.*51:b:)(.*)', '\1')

发表于 2020-1-27 23:16:28 | 显示全部楼层
本帖最后由 floor6ggg 于 2020-1-28 00:37 编辑

尝试用A大的正则表达式神器, 想一步到位,。。。。。用到其中的一个功能:变量及宏代入表达式前先转义字符。。这部分不熟悉不会用。。。。。。。替换的结果不够完美仅供参考一下…………中间有个空格,我也不知的怎么去除,…………可能是我目前使用的神器版本过低(1.5.1版本)的原因?………
### 友情提示:本脚本由 Au3.REHelper 于 2020/01/27 22:51 自动生成,不保证其正确性,请自行测试 ###
Local $sSource = 'password 51:b:01000000D08C9DDF0115D1118C7A00C04FC297EB010000000766BE1F58CCA44082BCC46C1A155B5A00000000020000000000106600000001000020000000DA6D8FE678773CE6C70D5B9A8DEBA5A721A0DF1423AC4623DB3E664BB290DFE5000000000E8000000002000020000000A35773E38EAC800BCA8AD6B6B86C683CA0DE054A11C51CF80875092B01C2CA7E2000000067BE91888738802AE683E91F3DCBCD4630B421CB31AC062405DF5171C387C4A0400000001F875ADDCF475F720C31A16C41E3E39F308DC329F48A32BA59C3127D163977E90EA37B30DCF73F7642626F59A8DC3673A051973B5AE697A3E0011413812EC12B' & @CRLF
;~MsgBox(0, '源字符串', $sSource)
$password = '12345678'
Local $sEscape = '(\.|\||\*|\?|\+|\(|\)|\{|\}|\[|\]|\^|\$|\\)'
Local $sSRERe = StringRegExpReplace($sSource, '(.*51:b:)(.*)', '\1 ' & StringRegExpReplace($password, $sEscape, '\\$1'), 1)
MsgBox(0, '替换结果', $sSRERe)
ConsoleWrite($sSRERe)
password 51:b: 12345678,中间有个空格,没辙了…………     等高人出手吧,看有没有办法去除中间的空格…………
发表于 2020-1-28 01:37:13 | 显示全部楼层
Local $sSource = 'password' & @CRLF & '51:b:01000000D08C9DDF0115D1118C7A00C04FC297EB010000000766BE1F58CCA44082BCC46C1A155B5A00000000020000000000106600000001000020000000DA6D8FE678773CE6C70D5B9A8DEBA5A721A0DF1423AC4623DB3E664BB290DFE5000000000E8000000002000020000000A35773E38EAC800BCA8AD6B6B86C683CA0DE054A11C51CF80875092B01C2CA7E2000000067BE91888738802AE683E91F3DCBCD4630B421CB31AC062405DF5171C387C4A0400000001F875ADDCF475F720C31A16C41E3E39F308DC329F48A32BA59C3127D163977E90EA37B30DCF73F7642626F59A8DC3673A051973B5AE697A3E0011413812EC12B' & @CRLF$sRe = '12345678'
Local $sOut = StringRegExpReplace($sSource, '(?is)(^.*51:b:)(.*)', '${1}' & $sRe)
MsgBox(0, 0, $sOut)


发表于 2020-1-28 11:41:46 | 显示全部楼层
zghwelcome 发表于 2020-1-28 01:37
[au3]Local $sSource = 'password' & @CRLF & '51:b:01000000D08C9DDF0115D1118C7A00C04FC297EB01000000076 ...

厉害!学习了。。。。原来可以这样写。。。。
 楼主| 发表于 2020-1-28 13:11:05 | 显示全部楼层
本帖最后由 anythinging 于 2020-1-28 13:12 编辑

感谢各位指点!我按5楼的方法汇总了,6楼的不会放入其中,还请指点。
$sSource=FileRead(@desktopDir&"\default.rdp");假设存放路径在桌面;替换文件中的password 51:b:后的内容
MsgBox(262144, '原文内容', $sSource)

$file=FileOpen(@desktopDir&"\default.rdp",2);2 = 写入模式(先删除之前的内容)

Local $sSRERe = StringRegExpReplace($sSource, '(.*51:b:)(.*)', '\1')
MsgBox(262144, '替换结果', $sSRERe)

$password = '12345678'
Local $sEscape = '(\.|\||\*|\?|\+|\(|\)|\{|\}|\[|\]|\^|\$|\\)'
Local $sSRERe = StringRegExpReplace($sSource, '(.*51:b:)(.*)', '\1 ' & StringRegExpReplace($password, $sEscape, '\\$1'), 1)
MsgBox(262144, '更改结果', $sSRERe)

FileWrite($file,$sSRERe)
FileClose($file)
另外我还想了个笨法,能否把password 51:b:这一行直接全部删除,再重新添加一行,恳请指点代码。


 楼主| 发表于 2020-1-28 15:24:56 | 显示全部楼层
zghwelcome 发表于 2020-1-28 13:26
[au3]
$sSource=FileRead(@desktopDir&"\default.rdp");假设存放路径在桌面;替换文件中的password 51:b:后 ...

感谢回复,这个确实有效,不过原文件内的其它内容没有了
 楼主| 发表于 2020-1-28 17:17:28 | 显示全部楼层
zghwelcome 发表于 2020-1-28 15:47
Local $sSRERe = StringRegExpReplace($sSource, '(?is)(^.*51:b:)(.*)', '${1}' & $password)

Local  ...

可以了,感谢指点!
 楼主| 发表于 2020-1-29 15:03:24 | 显示全部楼层
感谢指点!还想请教下,假如要删除这一行代码应该怎样写?谢谢!
发表于 2020-1-29 22:35:50 | 显示全部楼层
anythinging 发表于 2020-1-29 15:03
感谢指点!还想请教下,假如要删除这一行代码应该怎样写?谢谢!

代码里面的:
$file=FileOpen(@desktopDir&"\default.rdp", FileGetEncoding(@desktopDir&"\default.rdp") + 2);2 = 写入模式(先删除之前的内容)

在FileOpen的时候,文档的内容就已经删除为空值了,没有行可以删除了
 楼主| 发表于 2020-1-30 11:47:02 | 显示全部楼层
floor6ggg 发表于 2020-1-29 22:35
代码里面的:
$file=FileOpen(@desktopDir&"\default.rdp", FileGetEncoding(@desktopDir&"\default.rdp ...

感谢指点!请问如果要保留文件里其它内容,只是删除这一行呢?
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-3-29 15:06 , Processed in 0.102940 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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