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

[文本处理] 批处理命令findstr怎样查找文本中指定的文字,并提取所在行的前几行或后几行?

[复制链接]
发表于 2014-1-6 10:10:52 | 显示全部楼层 |阅读模式
文本内容:
公元前212年,罗马军队入侵叙拉古,将近80岁的阿基米德
正在全神贯注地研究沙堆中的一个几何图形,疏忽了回答一
个罗马士兵的问话,结果被长矛戳死。
18世纪的巴黎女孩索非·热尔曼在一本叫《数学的历史》书
中看到这一章,便得出这样的结论:如果一个人会如此痴
迷于一个导致他死亡的几何问题,那么数学必定是世界上最迷人的学科了。

比如查找“《数学的历史》”并取出所在行的上一行文字怎么做到?不胜感激
发表于 2014-1-6 10:28:39 | 显示全部楼层
  1. gawk "/《数学的历史》/{print a}{a=$0}" a.txt > b.txt
复制代码
 楼主| 发表于 2014-1-6 10:44:58 | 显示全部楼层
回复 2# DAIC


    大哥,我想弄明白怎样使用查找命令解决,不过还是谢谢。
发表于 2014-1-6 11:11:20 | 显示全部楼层
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set fileName=a.txt
  4. for /f "tokens=1 delims=:" %%i in ('findstr /n "《数学的历史》" %fileName%') do (
  5.     set lineKeyword=%%i
  6. )
  7. if !lineKeyword! equ 1 (
  8.     echo,
  9. ) else if !lineKeyword! equ 2 (
  10.     set /p linePri=<%fileName%
  11.     echo,%linePri%
  12. ) else (
  13.     set /a lineSkip=lineKeyword-2
  14.     call :next !lineSkip!
  15. )
  16. pause
  17. goto :eof

  18. :next
  19. for /f "skip=%1" %%i in (%fileName%) do (
  20.     echo,%%i
  21.     goto :eof
  22. )
复制代码
 楼主| 发表于 2014-1-6 13:00:38 | 显示全部楼层
回复 4# DAIC


    多谢指教,程序完全可以实现我想要的结果,您的程序在判断目标字符行数是否为第一行或第二行时,为什么区别对待呢?如果是第一行或第二行,可不可以都用 echo,来跳过?请指点。
发表于 2014-1-6 13:09:54 | 显示全部楼层
回复 5# pyc一厘米


    第二行为什么要跳过?
 楼主| 发表于 2014-1-6 13:58:21 | 显示全部楼层
回复 6# DAIC


   哦 我理解错了,非常感谢指点。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-21 02:28 , Processed in 0.031240 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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