批处理脚本删除多个文件中的特定行

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

我正在寻找一个脚本或程序,可以删除文本文件中的特定行(input.001.log ..... input.log.1900),文件大小为50MB,我有大约2k文件。在每一行都有一个字符串,我想删除每一行都有双字符“aa”“bb”等等,每行都有超过5个数字,每一行都有一个特殊字符,除了@#&和每一行都有超过2个特殊字符(比如@ bcd#38s#需要删除此行)

作为一个说明,我没有任何编程技巧,只有小批量脚本的经验。

到目前为止,我正在使用此代码:

@ECHO OFF 
SETLOCAL 
FOR %%i IN (input.txt) DO ( 
 TYPE "%%i"|FINDstr /l /v "aa bb cc dd ff gg hh ii jj kk ll mm nn pp qq rr ss tt uu vv xx yy zz" >"input_1.txt" 
) 
GOTO :EOF
batch-file lines
1个回答
0
投票

如果批处理具有合适的正则表达式实用程序,那将很容易,但FINDSTR is extremely limited and buggy。但是,FINDSTR可以相当有效地解决这个问题而不会有太多困难。

你对“特殊性格”的含义并不十分清楚。我的解释是你只想接受字母a-zA-Z,数字0-9,以及特殊字符@#&。我只能猜测你正在构建一个潜在密码字典。

如果您构建表示各种字符类的环境变量以及各种逻辑表达式,然后使用搜索字符串中的变量,我会发现此问题更容易。

我建议您将修改后的文件写入新文件夹。

@echo off
setlocal

set "alpha=abcdefghijklmnopqrstuvwxyz"
set "num=0123456789"
set "sym=@#&"

set "dups=aa bb cc dd ee ff gg hh ii jj kk ll mm nn oo pp qq rr ss tt uu vv ww xx yy zz 00 11 22 33 44 55 66 77 88 99 @@ ## &&"
set "bad=[^%alpha%%num%%sym%]"
set "num6=[%num%][^%num%]*[%num%][^%num%]*[%num%][^%num%]*[%num%][^%num%]*[%num%][^%num%]*[%num%]"
set "sym3=[%sym%][^%sym%]*[%sym%][^%sym%]*[%sym%]

set "source=c:\your\source\folder"
set "destination=c:\your\destination\folder"

for %%F in ("%source%\*.txt") do findstr /riv "%dups% %bad% %num6% %sym3%" "%%F" >"%destination%\%%~nxF"

Edit in response to Magoo's comment

如果您在Windows XP上运行,则必须稍微修改该解决方案,因为它具有127字节的正则表达式长度限制,并且%num6%表达式超出该限制。

如果将num6更改为,则该解决方案应适用于XP

set "num6=[%num%].*[%num%].*[%num%].*[%num%].*[%num%].*[%num%]"

该搜索在逻辑上给出相同的结果,但效率明显较低,因为在匹配过程中可能需要过多的回溯。

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