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

[文本处理] 求助批处理在包含关键词后面添加字符串

文本A内容如下格式,
[MARK]
00002070=9
01110800=0
00127034=0
00127033=0
00123095=0
[TIPWORD]
01600739=
01600433=
00002801=
00300518=
00002802=
01732016=

文本B内容如下:
002802
600739
732016

请问,如何在文本B里逐一读取每行内容为关键词,并且在文本A里[TIPWORD]字符串下面搜索,如果文本A里出现则在其后面自动添加固定的字符串例如“同V”
最终文本A效果如下:
[MARK]
00002070=9
01110800=0
00127034=0
00127033=0
00123095=0
[TIPWORD]
01600739=同V
01600433=
00002801=
00300518=
00002802=同V
01732016=同V

本帖最后由 Gin_Q 于 2021-5-18 18:41 编辑

python
  1. # -*- coding:gbk -*-
  2. a_content = []
  3. b_content = []
  4. a_file = "a.txt"
  5. b_file = "b.txt"
  6. content_add = "同V"
  7. with open(a_file) as fra:
  8.     a_content = fra.readlines()
  9. with open(b_file) as frb:
  10.     b_content = frb.readlines()
  11. for b_line in b_content:
  12.     if b_line[-1] == "\n":
  13.         b_line = b_line[0:-1]
  14.     for index in range(len(a_content)):
  15.         if a_content[index].find(b_line) != -1:
  16.             if a_content[index][-1] == "\n":
  17.                 a_content[index] = a_content[index][0:-1] + content_add + "\n"
  18.             else:
  19.                 a_content[index] = a_content[index][0:-1] + content_add
  20. # 覆盖写入
  21. with open(a_file, "w") as fw:
  22.     fw.writelines(a_content)
复制代码
QQ:1972544783

TOP

本帖最后由 wh123wh123 于 2021-5-18 19:21 编辑

回复 2# Gin_Q

无效果,文本内容多,按照从A文本里内容“[TIPWORD]”以下开始搜索并添加,到下一个“[”符号为止。因为[×××]这样的标签有多个。
逐一读取B文本里面的行内容。到A文本里面搜索,如果存在则在其后面添加字符串

TOP

本帖最后由 newswan 于 2021-5-19 00:15 编辑
  1. @echo off
  2. setlocal enableDelayedExpansion
  3. set path=%gnupath%;%path%
  4. for /f "delims=" %%b in (b.txt) do (
  5.     sed.exe ' /%%b/s/$/xxx/ ' -i a.txt
  6. )
复制代码
如果第一段没有匹配的,这个就可以

TOP

回复 4# newswan


    无效果

TOP

  1. for /f "delims=" %%b in (b.txt) do (
  2.     sed.exe -r -e ' /\[TIPWORD\]/,/\[/ {/%%b/s/$/xxx/} ' -i a.txt
  3. )
复制代码

TOP

回复 6# newswan


    你没仔细看我的问题

TOP

win7 以下 pass
  1. $a = 'xxxxx\a.txt';
  2. $b = 'xxxxx\b.txt';
  3. $t = '\xcd\xac\x56'
  4. [regex]::Replace(((gc $a -read 0) -join "`n"), "(?is)\[TIPWORD[^\[]+",
  5. {
  6. $str = $args.Value;
  7. (gc $b -read 0) | % {
  8. $str = [regex]::Replace($str, "(?s)(?<=\d+)($_=.*?)(\n?)", "$_=$t`$2");
  9. }
  10. $str;
  11. }
  12. ) | sc $a -Force;
复制代码
QQ: 己阵亡
脚本优先 [PowerShell win10]

TOP

回复 7# wh123wh123


    把 xxx 改成你需要的字符串就行了啊

TOP

返回列表