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

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

文本内容如下
{
      "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-.....为准。。。。。
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

  1. gawk '/tcp-[a-z]*/{sub(/tcp-[a-z]*/,"proxy"++n)}1' a.txt
复制代码

TOP

本帖最后由 senkiss 于 2024-5-16 09:34 编辑

回复 2# wanghan519
这样子好像不行!我的原本的意思是proxy1这个是从文本里面读取处理的内容其实就是第一行的内容proxy2代表第2行的内容
而且TCP后面的是IP地址类似8.8.8.8

TOP

本帖最后由 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

评分人数

TOP

本帖最后由 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-

TOP

回复 5# senkiss

4楼第6行代码替换为如下代码
  1. for /f tokens^=4^delims^=^" %%c in ("%%~a") do for %%p in ("!pv!") do echo,!s:%%c=%%~p!
复制代码

TOP

回复 5# senkiss

4楼代码已订正,应该可以了

TOP

  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

评分人数

bat小白,请多指教!谢谢!

TOP

回复 7# aloha20200628
非常感谢可以了!tokens^ 这啥用法膜拜。。。差太远和你们

TOP

回复 9# senkiss


这种写法主要是为了用双引号做列分隔符
http://bbs.bathome.net/thread-12395-1-1.html#pid79445
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

返回列表