[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 批处理如何从文本里随机提取一行替换到另一个文本?

A文本如何下
a.txt
ethernet0.address = "a2:1D:7CD:AE:AE"
ethernet0.address = "50:16:82:8B:67:36"
ethernet0.address = "F4:FE:16:C9:64:B6"
ethernet0.address = "A2:07:B1:7A:15:47"
ethernet0.address = "36:44:6C:36:1E:C5"
ethernet0.address = "B0:05:89:FE:E1:46"

B.txt
ethernet1.wakeOnPcktRcv = "FALSE"
ethernet1.addressType = "generated"
ethernet1.linkStatePropagation.enable = "TRUE"
ethernet0.address = "66:5A:DB:0C:A1:4D"
ethernet1.pciSlotNumber = "-1"
ethernet1.generatedAddress = "00:0c:29:59:ac:e9"
ethernet1.generatedAddressOffset = "10"
tools.remindInstall = "TRUE"
floppy0.present = "FALSE"
tools.syncTime = "FALSE"

批处理如何实现从a.txt文本里随机或者顺序取一行替换B.txt里的ethernet0.address = 开头的这行,包括双引号?本人小小白,研究半天sed还有find貌似实现有点困难,请高人指点,主要是还包括特殊符号

回复 6# Batcher


    感谢,可以了!谢谢

TOP

回复 3# qq866286


2楼最后一行改成这样试试:
  1. sed -i "/^ethernet0/ s/.*/ethernet0.address = \"%NewMAC%\"/" "%FileB%"
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

本帖最后由 qq866286 于 2020-10-31 23:36 编辑

回复 4# yhcfsr


感谢大神!win10下测试好用,谢谢

TOP

  1. #&cls&@Powershell "& {[ScriptBlock]::Create("'#' + ([io.file]::ReadAllText('%~f0',[text.encoding]::Default))").Invoke()}" & pause & exit
  2. $a_txt = 'a.txt'
  3. $b_txt = 'b.txt'
  4. $text_a = [io.file]::ReadAllLines($a_txt,[text.encoding]::Default)|?{$_ -ne ''};
  5. $text_b = [io.file]::ReadAllLines($b_txt,[text.encoding]::Default);
  6. $rnline = Get-Random -InputObject $text_a -Count 1;
  7. $text_b -replace '^ethernet0.address =.*',$rnline|Set-Content -Path $b_txt -Encoding Default
复制代码
1

评分人数

QQ 33892006

TOP

回复 2# Batcher


    刚刚测试了一下,“”没有加进去,不知道应该如何改进?

TOP

回复 1# qq866286


请参考Q-04和Q-05把bat文件和ini文件都保存为ANSI编码:
https://mp.weixin.qq.com/s/6lbb97qUOs1sTyKJfN0ZEQ

命令行工具 sed.exe 下载地址:
http://bcn.bathome.net/s/tool/index.html?key=sed
  1. @echo off
  2. set "FileA=A.txt"
  3. set "FileB=B.txt"
  4. for /f %%a in ('type "%FileA%" ^| find /c /v ""') do (
  5.     set "RowNum=%%a"
  6. )
  7. set /a RndNum=%random%%%(%RowNum%-1+1)+1
  8. for /f "tokens=3" %%a in ('type "%FileA%" ^| sed -n "%RndNum%p"') do (
  9.     set "NewMAC=%%~a"
  10. )
  11. sed -i "/^ethernet0/ s/.*/ethernet0.address = "%NewMAC%"/" "%FileB%"
复制代码
1

评分人数

    • qq866286: 刚刚测试了一下,“”没有加进去,不知道应 ...技术 + 1
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

返回列表