Board logo

标题: [文本处理] 【已解决】求助批处理替换文本内容 [打印本页]

作者: 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

  1. 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均在同目录...
  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
复制代码

作者: 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行代码替换为如下代码
  1. 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

  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
复制代码

作者: 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