在我的文本文件中是这一行。
08.01.2013 20:06:36: SolsticeFTW (109.189.238.113:60381) 04ee8dfa81f700bba194a528911ecb4a - #0
08.01.2013 20:11:00: SolsticeFTW (109.189.238.113:60381) 04ee8dfa81f700bba194a528911ecb4a - #0
08.01.2013 20:11:24: SolsticeFTW (109.189.238.113:60381) 04ee8dfa81f700bba194a528911ecb4a - #0
08.01.2013 20:11:50: SolsticeFTW (109.189.238.113:60381) 04ee8dfa81f700bba194a528911ecb4a - #0
09.01.2013 15:39:57: lalka (95.165.55.92:15609) 161c5a17c5afc0b1e079fca7fdc8f1a9 - #0
我想根据Command Findstr过滤一个文本文件,这可以工作,但我不能让它工作,只过滤32位数字。例如04ee8dfa81f700bba194a528911ecb4a和161c5a17c5afc0b1e079fca7fdc8f1a9。它只能通过过滤整行来实现。
有谁知道我怎么能只过滤32位符号/令牌?
答案 0 :(得分:1)
FINDSTR只能打印匹配的整行。它没有像grep这样的功能,只能列出文本的匹配部分。
FOR / F命令通常可用于从一行文本中提取标记,具体取决于数据的格式。您可以使用FINDSTR仅选择适当的行,使用FOR / F处理这些结果并提取32位数字令牌。
我不知道您的FINDSTR搜索条件是什么,所以我会做一些事情作为例子。假设您要打印出以#0
结尾的行的32位数字标记。
FINDSTR选择合适的行,查找以#0
结尾的行。并且FOR / F将每个结果行解析为由空格分隔的标记。 (可以通过DELIMS选项更改令牌分隔符,但默认情况下它是空格和制表符)。你想要第5个令牌。
for /f "tokens=5" %%A in ('findstr /le " #0" "someFile.txt"') do echo %%A
编辑以回应OP评论
如果您不需要过滤行而只是想将每个32位ID写入新文件,那么它就更简单了:
(for /f "tokens=5" %%A in (logged-players.log) do echo %%A) >logged-bans.txt