Board logo

标题: [文本处理] [已解决]批处理如何提取/获取txt文本中两个指定行之间的行内容? [打印本页]

作者: hlzj88    时间: 2016-5-3 17:37     标题: [已解决]批处理如何提取/获取txt文本中两个指定行之间的行内容?

本帖最后由 hlzj88 于 2016-5-4 22:37 编辑

如题,假设
aaa
123
456
789
bbb
文本大小不限,行数不限,aaa与bbb是唯一的,aaa bbb可能是一行的唯一,也可能是一句中的一个词,且他们的上下都有另外的行。求提取123 456 789。
作者: WHY    时间: 2016-5-3 18:15

本帖最后由 WHY 于 2016-5-4 09:30 编辑
  1. @echo off & setlocal enabledelayedexpansion
  2. for /f "delims=" %%i in (a.txt) do (
  3.     set "s=%%i"
  4.     if not "!s:bbb=!" == "!s!" (set flag=) else if defined flag echo;!s!
  5.     if not "!s:aaa=!" == "!s!" set "flag=1"
  6. )
  7. pause
复制代码
  1. @if (0)==(0) echo off
  2. cscript //nologo //e:jscript "%~f0" < a.txt > b.txt
  3. pause & exit
  4. @end
  5. var arr = WSH.StdIn.ReadAll().match(/aaa.*\n([\s\S]+)\r?\n.*bbb/i);
  6. if(arr) WSH.Echo(arr[1])
复制代码

作者: WHY    时间: 2016-5-3 18:16

本帖最后由 WHY 于 2016-5-4 09:31 编辑
  1. gawk "BEGIN{IGNORECASE=1}{if($0~/bbb/){a=0}else if(a)print;if($0~/aaa/)a=1}" a.txt > b.txt
复制代码

作者: /zhqsystem/zhq    时间: 2016-5-3 19:24

回复 1# hlzj88
for /f "delims=" %%i in ('type "%~f1"')do if /i not "%%i"=="aaa"  if /i not "%%i"=="bbb"  (echo,%%i)
作者: hlzj88    时间: 2016-5-4 07:14

回复 4# /zhqsystem/zhq
回复 2# WHY
谢谢WHY 和/zhqsystem/zhq 劳神给出代码,经测试,WHY的代码都可以完成最前面问题的处理,/zhqsystem/zhq的代码在有多余上下行时,仅去掉aaa,bbb。

由于我对问题描述不到位,已在顶楼增加描述,希望能得到继续帮助
作者: WHY    时间: 2016-5-4 09:32

回复 5# hlzj88


    已修改
作者: hlzj88    时间: 2016-5-4 22:39

回复 3# WHY

谢谢了,,忙的一塌糊涂,基本发问就没管了




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2