标题: [文本处理] 【已解决】求助批处理替换文本内容 [打印本页]
作者: senkiss 时间: 2024-5-16 00:12 标题: 【已解决】求助批处理替换文本内容
文本内容如下
{
"server": "aaaaaa",
"server_port": 41910,
"uuid": "499e160a-9498-455b-bf48-c2bbdabd13e1",
"packet_encoding": "xudp",
"security": "auto",
"alter_id": 0,
"tag": "tcp-aaaaaa",
"type": "vmess"
},
{
"server": "bbbbb",
"server_port": 57019,
"uuid": "821baedb-ffdd-4637-8703-b46c11e63a69",
"packet_encoding": "xudp",
"security": "auto",
"alter_id": 0,
"tag": "tcp-bbbbb",
"type": "vmess"
},
.............后面类似
另一个文档里面有
proxy1
proxy2
.....
要求怎么把上面的“tcp-aaaaaa",替换成proxy1 tcp-bbbbb换成proxy2 替换多少次以匹配到多少tcp-.....为准。。。。。
作者: wanghan519 时间: 2024-5-16 04:05
- gawk '/tcp-[a-z]*/{sub(/tcp-[a-z]*/,"proxy"++n)}1' a.txt
复制代码
作者: senkiss 时间: 2024-5-16 09:33
本帖最后由 senkiss 于 2024-5-16 09:34 编辑
回复 2# wanghan519
这样子好像不行!我的原本的意思是proxy1这个是从文本里面读取处理的内容其实就是第一行的内容proxy2代表第2行的内容
而且TCP后面的是IP地址类似8.8.8.8
作者: aloha20200628 时间: 2024-5-16 10:43
本帖最后由 aloha20200628 于 2024-5-16 12:38 编辑
回复 1# senkiss
假设源文件为1.txt,替换值所在文件为2.txt,最终替换结果文件为3.txt,代码如下存为test.bat运行,与1.txt和2.txt均在同目录...- @echo off &setlocal enabledelayedexpansion
- (for /f "delims=" %%a in (1.txt) do (
- set "s=%%a"
- if /i "!s!" neq "!s:*tcp-=!" (
- set/p "pv="
- for /f tokens^=4^delims^=^" %%c in ("%%~a") do for %%p in ("!pv!") do echo,!s:%%c=%%~p!
- ) else (echo,%%a)
- ))<2.txt >3.txt
- endlocal&pause&exit/b
复制代码
作者: senkiss 时间: 2024-5-16 11:48
本帖最后由 senkiss 于 2024-5-16 12:04 编辑
回复 4# aloha20200628
好像替换成这样了
{
"server": "IP地址",
"server_port": 41910,
"uuid": "499e160a-9498-455b-bf48-c2bbdabd13e1",
"packet_encoding": "xudp",
"security": "auto",
"alter_id": 0,
"tag"proxy10150"233boy-tcp-IP地址",
"type": "vmess"
},
{
"server": "IP地址",
"server_port": 57019,
"uuid": "821baedb-ffdd-4637-8703-b46c11e63a69",
"packet_encoding": "xudp",
"security": "auto",
"alter_id": 0,
"tag"proxy10151"233boy-tcp-IP地址",
"type": "vmess"
},
我修改了你那个*tcp-成*233boy-
作者: aloha20200628 时间: 2024-5-16 12:34
回复 5# senkiss
4楼第6行代码替换为如下代码- for /f tokens^=4^delims^=^" %%c in ("%%~a") do for %%p in ("!pv!") do echo,!s:%%c=%%~p!
复制代码
作者: aloha20200628 时间: 2024-5-16 12:40
回复 5# senkiss
4楼代码已订正,应该可以了
作者: 77七 时间: 2024-5-16 13:11
- @echo off
- set file_tag=1.txt
- set file_pro=2.txt
-
- cd /d "%~dp0"
- for /f "tokens=1* delims=[]" %%a in ('find /n """tag"":" ^<"%file_tag%"') do (
- set #%%a=1
- )
- (for /f "tokens=1* delims=[]" %%x in ('find /n /v "" ^<"%file_tag%"') do (
- if defined #%%x (
- for /f tokens^=1-4*delims^=^" %%a in ("%%y") do (
- set /p str=
- call echo %%a"%%b"%%c"%%str%%"%%e
- )
- ) else (
- echo=%%y
- )
- ))<"%file_pro%" >$
- move $ "%file_tag%"
- pause
复制代码
作者: senkiss 时间: 2024-5-16 13:11
回复 7# aloha20200628
非常感谢可以了!tokens^ 这啥用法膜拜。。。差太远和你们
作者: Batcher 时间: 2024-5-16 14:09
回复 9# senkiss
这种写法主要是为了用双引号做列分隔符
http://bbs.bathome.net/thread-12395-1-1.html#pid79445
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |