无忧启动论坛

标题: 请教,批处理怎么获取文本内指定行前面的内容? [打印本页]

作者: moran    时间: 2018-1-6 23:34
标题: 请教,批处理怎么获取文本内指定行前面的内容?
比如文本内有一行( HTTP://bbs.wuyou.net),怎么把这行前面两行的一行提取出来?
也就是提取隔了 (http://bbs.wuyou.net),两行的那一行文本。

作者: xing1954    时间: 2018-1-7 09:07
bat 可以操作文本,只是麻烦。
例建个文本文件
a.txt
内容
1111
2222
运行批处理

@echo off
set/p  n=要第几行:
set/a n-=1
if "%n%"=="0" (set "skip=") else (set "skip=skip=%n%")
for /f "%skip% tokens=* delims="  %%i in (a.txt) do (
set a=%%i&&goto:a)
:a
echo 内容是:%a%
pause


作者: slore    时间: 2018-1-7 09:50
定义2个变量,保存前一行,还有当前行,
循环遇到当前行是 你指定的 “http”,退出循环。
作者: tools241    时间: 2018-1-7 21:16
本帖最后由 tools241 于 2018-1-7 21:43 编辑

利用仿Linux命令 "grep, sed, expr" 写一批处理内容如下:
grep.exe  -n  "bbs.wuyou.net" Input.txt  |  sed.exe  -e  "s/\([0-9][0-9]*\):.*/expr.exe \1 - 2/" > output.bat
CALL  output.bat > tmp.txt
for  /f  %%f  in  (tmp.txt)  do  sed.exe -e "1,%%fd" Input.txt | sed.exe -e "2,$d" > output.txt


_____________________________________________________________

说明:
假设 "bbs.wuyou.net" 在 Input.txt 的第10行,

grep.exe  -n  "bbs.wuyou.net" Input.txt
会在搜到的行前 "加行号:" 产生
10:
bbs.wuyou.net

sed.exe  -e  "s/\([0-9][0-9]*\):.*/expr.exe \1 - 2/" > output.bat
.表示任意字, *表示前一个字出现任意次, [0-9]表示数字, 会将 \( 至  \)  内的数字存到 \1
因此 output.bat 的内容为
expr.exe 10 - 2
CALL output.bat 存到 tmp.txt 的内容为
8

for  /f  %%f  in  (tmp.txt)  do  sed.exe -e "1,%%fd" Input.txt
会将 Input.txt 的第1至8删除
sed.exe -e "2,$d" > output.txt
再将剩余的第2行至最后一行删除.

最后 output.txt 为 Input.txt 中第9行的内容.

如何利用 仿Unix/Linux命令 sed 一次替换文字中的 "某/些相似性的字串"  ==>
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=383106
作者: moran    时间: 2018-1-11 12:05
tools241 发表于 2018-1-7 21:16
利用仿Linux命令 "grep, sed, expr" 写一批处理内容如下:
grep.exe  -n  "bbs.wuyou.net" Input.txt  |  s ...

好的,谢谢,我研究一下。
作者: moran    时间: 2018-1-11 12:06
xing1954 发表于 2018-1-7 09:07
bat 可以操作文本,只是麻烦。
例建个文本文件
a.txt

谢谢回复,我看看。
作者: sairen139    时间: 2018-1-12 20:11
tools241 发表于 2018-1-7 21:16
利用仿Linux命令 "grep, sed, expr" 写一批处理内容如下:
grep.exe  -n  "bbs.wuyou.net" Input.txt  |  s ...

获取文本指定行前面的内容




欢迎光临 无忧启动论坛 (http://bbs.c3.wuyou.net/) Powered by Discuz! X3.3