2013-01-16 79 views
0

在我的文本文件中是這一行。批量使用FindStr +長度

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位數的符號/令牌?

回答

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 
+0

上面的文本框被稱爲「logged-players.log」。 我只想將32個Digit Tokens/ID寫入名爲「logged-bans.txt」的文本文件中。 只是ID不是#0或任何東西,只有32位數字的令牌/ ID。 使用[0-9a-z]可能工作,但我不知道用哪個命令。 – user1984532

+0

@ user1984532 - 我更新了我的答案以解決您的評論。 – dbenham

+0

然後我得到 「C:\測試>呼應161c5a17c5afc0b1e079fca7fdc8f1a9 161c5a17c5afc0b1e079fca7fdc8f1a9」,但我想只是 「161c5a17c5afc0b1e079fca7fdc8f1a9」 露面不是路徑和回聲.. – user1984532

相關問題