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

[文本处理] 如何删除文本里指定行的上下文内容(首尾多行内容)/提取两个指定行之间的多行内容

[复制链接]
发表于 2017-4-9 15:58:59 | 显示全部楼层 |阅读模式
本帖最后由 pcl_test 于 2017-4-9 20:03 编辑

我有若干个以tem1、tem2、tem3顺序命名的txt文件,每个文件的格式均为     

                        
00000000  VERSION=WINDOWS x64   14:39:34  APR 09, 2017 CP=      1.250
project--Static Structural (C4)                                               
  ***** POST1 NODAL BODY LOAD TEMPERATURE LISTING *****                        
  LOAD STEP=     1  SUBSTEP=     1                                             
   TIME=    1.0000      LOAD CASE=   0                                         
    NODE    TEMP
       1   228.18   
       2   228.18   
       3   228.20   
       4   228.22   
       5   228.25   
       6   228.30   
       7   228.34   
       8   228.40   
       9   228.47   
      10   228.56   
MINIMUM VALUES
NODE        893
VALUE    227.97   
MAXIMUM VALUES
NODE         66
VALUE    261.64   


其中我只需要中间10行的数据,所以我想要批量删除前6行和后6行数据,请问如何实现呢?
 楼主| 发表于 2017-4-9 18:07:28 | 显示全部楼层
我现在找到办法删除前n行的数据了
  1. @ECHO OFF
  2. ::设置要操作的文件夹路径如"d:"及删除的前N行如6
  3. SET TxtDir=%cd%
  4. SET /A N=6
  5. ECHO 开始操作,请稍后...
  6. CD /D %TxtDir%
  7. FOR /F "tokens=1 delims=" %%I IN ('DIR /A /B *.txt') DO ((MORE +%N% "%%I">"%%I_")&(DEL /A /F /Q "%%I")&(REN "%%I_" "%%I"))
  8. ECHO 操作结束
  9. PAUSE
复制代码
不知道可不可以修改一下,再删除后n行的数据
发表于 2017-4-9 19:02:57 | 显示全部楼层
正则表达式
^\s+\d+\s+\d+\.\d+
 楼主| 发表于 2017-4-9 19:26:10 | 显示全部楼层
谢谢各位了,我自己用比较省事儿的方法的把问题解决了,通过依次删除关键词所在行、删除空行、删除前几行把要的数据提取出来了,代码如下。
  1. @echo off
  2. ::删除文本中含关键字的行
  3. for %%1 in (*.txt)do (findstr /iv  "NODE VALUE" "%%1">#
  4. move "#" "%%1">nul 2>nul)
  5. ::处理文本空行
  6. for %%a in (*.txt) do (
  7. for /f "tokens=*" %%b in ('type "%%a"') do echo %%b>>"1%%a"
  8. del "%%a"
  9. ren "1%%a" "%%a")
  10. ::删除的前N行如10
  11. SET TxtDir=%cd%
  12. SET /A N=10
  13. ECHO 开始操作,请稍后...
  14. CD /D %TxtDir%
  15. FOR /F "tokens=1 delims=" %%I IN ('DIR /A /B *.txt') DO ((MORE +%N% "%%I">"%%I_")&(DEL /A /F /Q "%%I")&(REN "%%I_" "%%I"))
  16. ECHO 操作结束
  17. PAUSE
复制代码
发表于 2017-4-9 20:37:56 | 显示全部楼层
假设格式固定
1、
  1. findstr /rc:"^[         ]*[0-9][0-9]*[         ][         ]*[0-9][0-9\.]*[         ]*$" "文本.txt"
复制代码
2、
  1. @echo off
  2. call :read "文本.txt"
  3. pause&exit
  4. :read
  5. setlocal enabledelayedexpansion
  6. for /f "skip=6 tokens=1* delims=:" %%a in ('findstr /n .* "%~1"') do (
  7.                 set /a n+=1
  8.                 echo;%%b
  9.                 if !n! equ 10 goto :eof
  10. )
复制代码
发表于 2017-4-9 21:14:33 | 显示全部楼层
  1. powershell "gc '文本.txt'|?{$_ -match '^\s*?\d+\s+\d+(\.\d+)?\s*$'}"
复制代码
  1. powershell "(gc '文本.txt')[6..15]"
复制代码

评分

参与人数 1技术 +1 收起 理由
codegay + 1 1

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-17 13:11 , Processed in 0.019817 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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