批量过滤文件中匹配的行进行输出

问题描述 投票:0回答:1

赫勒洛, 不起作用的脚本如下,


@echo off
setlocal EnableDelayedExpansion
echo.
echo.
echo.
(for /F "delims=" %%a in (find.txt) do (
   set "in=%%a"
   for %%v in (INT CHAR) do if "!in:*%%v=%%v!" neq "!in!" set "out=!in:*%%v=%%v!"
   echo !out!
)) > D:\test\TGT.txt

每行都以字符串结尾,例如:

abc
abc_01
/
DEF
DEF_02

请建议一个脚本,该脚本将仅捕获和打印以

INT
CHAR
开头的行,并且最后一个字符串末尾没有
_01
_02
。这里
_
(下划线)是识别和忽略该行的关键。

source.txt

INT SDFF 9784 abc
INT SDFF 098 abc_01
INT SDFF 9784 abc_02
ABC INT SDFF 098 abc_03
CHAR SDFF 9784 xyz
CHAR SDFF 098 XYZ_02
INT jkdf 981 DEF

out.txt
(预期结果)

INT SDFF 9784 abc
CHAR SDFF 9784 xyz
INT jkdf 981 DEF
batch-file
1个回答
0
投票

此线路过滤任务的简单解决方案:

%SystemRoot%\System32\findstr.exe /B /R "CHAR\> INT\>" "source.txt" | %SystemRoot%\System32\findstr.exe /R /V "_[0123456789][0123456789]*$" >"out.txt"

第一个 FINDSTR 使用区分大小写的 r 正则表达式在文件

source.txt
中搜索以单词 CHAR 或单词
INT
开头的行
b
。例如以
CHARACTER
INT32
开头的行会被第一个 FINDSTR 忽略。

注意: 搜索字符串中的空格被

"
括起来,而搜索字符串中没有留下
/C:
,则被解释为逻辑 OR

找到的行将被重定向,并使用

|
作为第二个 FINDSTR 的输入。

第二个FINDSTR使用区分大小写的r正则表达式搜索以下划线和一个或多个数字结尾的行,并输出插入的v结果,这意味着所有以下划线和一个结尾的行NOT或更多数字。

注意: 也可以使用

[0-9]
代替
[0123456789]
,但
[0-9]
还包括三个字符
¹²³

第二个 FINDSTR 的输出通过

>
重定向到文件
out.txt

打开命令提示符,运行

findstr /?
并阅读输出帮助以获取有关所使用选项和正则表达式的更多详细信息。

另请参阅有关 使用命令重定向运算符 的 Microsoft 文章,了解重定向运算符

|
>
的说明。

© www.soinside.com 2019 - 2024. All rights reserved.