我正在寻找一个脚本或程序,可以删除文本文件中的特定行(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
如果批处理具有合适的正则表达式实用程序,那将很容易,但FINDSTR is extremely limited and buggy。但是,FINDSTR可以相当有效地解决这个问题而不会有太多困难。
你对“特殊性格”的含义并不十分清楚。我的解释是你只想接受字母a-z
和A-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"
如果您在Windows XP上运行,则必须稍微修改该解决方案,因为它具有127字节的正则表达式长度限制,并且%num6%
表达式超出该限制。
如果将num6更改为,则该解决方案应适用于XP
set "num6=[%num%].*[%num%].*[%num%].*[%num%].*[%num%].*[%num%]"
该搜索在逻辑上给出相同的结果,但效率明显较低,因为在匹配过程中可能需要过多的回溯。