0

在我的文本文件中是这一行。

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

我想根据命令 Findstr 过滤一个文本文件,这可行,但我无法让它只过滤 32 位单词。例如 04ee8dfa81f700bba194a528911ecb4a 和 161c5a17c5afc0b1e079fca7fdc8f1a9。到目前为止,它只能通过过滤整行来工作。

有谁知道我如何能够仅过滤 32 位符号/令牌?

4

1 回答 1

1

FINDSTR 只能打印匹配的整行。它没有像 grep 这样只能列出文本匹配部分的功能。

FOR /F 命令通常可用于从一行文本中提取标记,具体取决于数据的格式。您可以使用 FINDSTR 仅选择适当的行,并使用 FOR /F 处理这些结果并提取 32 位标记。

我不知道您的 FINDSTR 搜索条件是什么,所以我会编造一些东西作为示例。假设您要打印以 . 结尾的行的 32 位标记#0

FINDSTR 选择适当的行,寻找以 . 结尾的行#0。并且 FOR /F 将每个结果行解析为由空格分隔的标记。(标记分隔符可以通过 DELIMS 选项更改,但默认为空格和制表符)。你想要第五个令牌。

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
于 2013-01-16T22:23:38.797 回答