找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 28221|回复: 9

[文本处理] 【已解决】求助批处理替换文本内容

[复制链接]
发表于 2024-5-16 00:12:03 | 显示全部楼层 |阅读模式
文本内容如下
{
      "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-.....为准。。。。。

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2024-5-16 04:05:49 | 显示全部楼层
  1. gawk '/tcp-[a-z]*/{sub(/tcp-[a-z]*/,"proxy"++n)}1' a.txt
复制代码
 楼主| 发表于 2024-5-16 09:33:24 | 显示全部楼层
本帖最后由 senkiss 于 2024-5-16 09:34 编辑

回复 2# wanghan519
这样子好像不行!我的原本的意思是proxy1这个是从文本里面读取处理的内容其实就是第一行的内容proxy2代表第2行的内容
而且TCP后面的是IP地址类似8.8.8.8
发表于 2024-5-16 10:43:22 | 显示全部楼层
本帖最后由 aloha20200628 于 2024-5-16 12:38 编辑

回复 1# senkiss

假设源文件为1.txt,替换值所在文件为2.txt,最终替换结果文件为3.txt,代码如下存为test.bat运行,与1.txt和2.txt均在同目录...

  1. @echo off &setlocal enabledelayedexpansion
  2. (for /f "delims=" %%a in (1.txt) do (
  3.         set "s=%%a"
  4.         if /i "!s!" neq "!s:*tcp-=!" (
  5.                 set/p "pv="
  6.                 for /f tokens^=4^delims^=^" %%c in ("%%~a") do for %%p in ("!pv!") do echo,!s:%%c=%%~p!
  7.         ) else (echo,%%a)
  8. ))<2.txt >3.txt
  9. endlocal&pause&exit/b
复制代码

评分

参与人数 1技术 +1 收起 理由
senkiss + 1 乐于助人

查看全部评分

 楼主| 发表于 2024-5-16 11:48:55 | 显示全部楼层
本帖最后由 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-
发表于 2024-5-16 12:34:22 | 显示全部楼层
回复 5# senkiss

4楼第6行代码替换为如下代码
  1. for /f tokens^=4^delims^=^" %%c in ("%%~a") do for %%p in ("!pv!") do echo,!s:%%c=%%~p!
复制代码
发表于 2024-5-16 12:40:10 | 显示全部楼层
回复 5# senkiss

4楼代码已订正,应该可以了
发表于 2024-5-16 13:11:33 | 显示全部楼层
  1. @echo off
  2. set file_tag=1.txt
  3. set file_pro=2.txt

  4. cd /d "%~dp0"
  5. for /f "tokens=1* delims=[]" %%a in ('find /n """tag"":" ^<"%file_tag%"') do (
  6.         set #%%a=1
  7. )
  8. (for /f "tokens=1* delims=[]" %%x in ('find /n /v "" ^<"%file_tag%"') do (
  9.         if defined #%%x (
  10.                 for /f tokens^=1-4*delims^=^" %%a in ("%%y") do (
  11.                         set /p str=
  12.                         call echo %%a"%%b"%%c"%%str%%"%%e
  13.                 )
  14.         ) else (
  15.                 echo=%%y
  16.         )
  17. ))<"%file_pro%" >$
  18. move $ "%file_tag%"
  19. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
senkiss + 1 乐于助人

查看全部评分

 楼主| 发表于 2024-5-16 13:11:40 | 显示全部楼层
回复 7# aloha20200628
非常感谢可以了!tokens^ 这啥用法膜拜。。。差太远和你们
发表于 2024-5-16 14:09:49 | 显示全部楼层
回复 9# senkiss


这种写法主要是为了用双引号做列分隔符
http://bbs.bathome.net/thread-12395-1-1.html#pid79445
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 00:04 , Processed in 0.023658 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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