标题: [文本处理] 批处理如何从文本里随机提取一行替换到另一个文本? [打印本页]
作者: qq866286 时间: 2020-10-31 21:39 标题: 批处理如何从文本里随机提取一行替换到另一个文本?
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貌似实现有点困难,请高人指点,主要是还包括特殊符号
作者: Batcher 时间: 2020-10-31 22:37
回复 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- @echo off
- set "FileA=A.txt"
- set "FileB=B.txt"
- for /f %%a in ('type "%FileA%" ^| find /c /v ""') do (
- set "RowNum=%%a"
- )
- set /a RndNum=%random%%%(%RowNum%-1+1)+1
- for /f "tokens=3" %%a in ('type "%FileA%" ^| sed -n "%RndNum%p"') do (
- set "NewMAC=%%~a"
- )
- sed -i "/^ethernet0/ s/.*/ethernet0.address = "%NewMAC%"/" "%FileB%"
复制代码
作者: qq866286 时间: 2020-10-31 23:22
回复 2# Batcher
刚刚测试了一下,“”没有加进去,不知道应该如何改进?
作者: yhcfsr 时间: 2020-10-31 23:28
- #&cls&@Powershell "& {[ScriptBlock]::Create("'#' + ([io.file]::ReadAllText('%~f0',[text.encoding]::Default))").Invoke()}" & pause & exit
-
- $a_txt = 'a.txt'
- $b_txt = 'b.txt'
- $text_a = [io.file]::ReadAllLines($a_txt,[text.encoding]::Default)|?{$_ -ne ''};
- $text_b = [io.file]::ReadAllLines($b_txt,[text.encoding]::Default);
-
- $rnline = Get-Random -InputObject $text_a -Count 1;
- $text_b -replace '^ethernet0.address =.*',$rnline|Set-Content -Path $b_txt -Encoding Default
复制代码
作者: qq866286 时间: 2020-10-31 23:32
本帖最后由 qq866286 于 2020-10-31 23:36 编辑
回复 4# yhcfsr
感谢大神!win10下测试好用,谢谢
作者: Batcher 时间: 2020-11-1 21:28
回复 3# qq866286
2楼最后一行改成这样试试:- sed -i "/^ethernet0/ s/.*/ethernet0.address = \"%NewMAC%\"/" "%FileB%"
复制代码
作者: qq866286 时间: 2020-11-3 20:44
回复 6# Batcher
感谢,可以了!谢谢
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |