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

[文本处理] 批处理怎样根据关键词定位, 取出上一行的前半部分?

例如:
===========================
26
00:02:00,060 --> 00:02:04,600
第十九话 外卖

356
00:23:29,000 --> 00:23:32,390
你就这样深陷下去
===========================

给出 "第十九话 外卖" (如果可以"第*话 "定位就更好了), 可以输出 "00:02:00,060"  然后转成 "00:02:00.060"
给出 "你就这样深陷下去".  ......................................, 可以输出 "00:23:29,000" 然后转成  "00:23:29.000"

另外, sed , grep, awk 等在匹配中文时(cp936), 一个汉字是匹配"??"还是"?",
如前面的"第十九话"中,数字的表达式怎么写?  谢谢

  1. sed "$!N;/你就这样深陷下去/{s/\(..:..:..,...\) --.*/\1/p};D" a.txt
复制代码

TOP

  1. @echo off&setlocal enabledelayedexpansion
  2. set "var=第十九话 外卖"
  3. for /f "delims=" %%a in (a.txt) do (
  4.   set/a n+=1
  5.   set ".!n!=%%a"
  6.   if "%%a"=="!var!" (
  7.     set/a m=!n!-1
  8.     call set str=%%.!m!%%
  9.     set str=!str:~,12!
  10.     echo !str:,=.!
  11.   )
  12. )
  13. pause
复制代码

TOP

本帖最后由 tor524e 于 2012-4-5 13:54 编辑

谢谢gawk 和 apang ...   SED的部分不是很懂

sed "$!N;/你就这样深陷下去/{s/\(..:..:..,...\) --.*/\1/p};D" a.txt

蓝色部分中的 "/你就这样深陷下去/"是定位的, {}中间部分不太明白, 求解...
s/\(..:..:..,...\) --.*/\1/ 不是替换吗?  可是这时sed不是定位在"你就这样深陷下去"那一行吗? sed是按行处理的, 为何能搜到前一行的内容呢?
还是有什么命令跟前一行合并了?

TOP

返回列表