最近有個小需求,想從 cmdkey /list 記憶密碼清單找出用某帳號登入的伺服器對象,例如想查出 jeffrey 被用來登入 TERMSRV/RemoteSvr、RemoteSvr(Domain)、TERMSRV/172.28.1.1。

上圖項目不多,直接用眼睛看即可。我的實際案例包含 git、sourcetree、MongoDB Compass... 等五花八門紀錄數十條,我想下指令篩選,試了 findstr,找到是找到了,但只看到帳號不知連到哪裡,查了個寂寞。

findstr 的能耐只到這裡,想多顯示帳號上方兩行內容,需要換工具。

Cmder 內附 UNIX 界的強大文字搜尋工具 - grep,grep 除了支援正則表示式查詢(Regular Expression 也是讓程式設計師人生變彩色的技能之一,推薦花點時間學會),顯示參數包含 -B num、-A num,可指定多顯示前後幾行內容。cmdkey /list | grep -B 3 jeffrey 會顯示 jeffrey 所在行及其上方三行內容,得到我要的結果:

在 Windows 要使用 grep 需另外安裝,有沒有原生的 CLI 工具?

有,Windows PowerShell 對映 grep 的 CLI 工具是 Select-String,一樣支援正則表示式並有 -Context 參數指定前後文要包含的行數,-Context 3,1 代表包含上三行下一行,-Context 3 表前後多顯示三行。故本例可寫成 cmdkey /list | Select-String jeffrey -Context 3,0

CLI 技能 + 0.5。


Comments

# by ChrisTorng

看到這種純文字問題,我現在第一個想到的是問 ChatGPT。先前我遇到兩次,一次是 JSON 一次是 log,都是要查出兩個非常長的字串之間倒底有哪裡不一樣,結果都有找出來。 也經肉眼比對確認無誤。這個萬用工具還沒 100% 可靠,但遇到較非關鍵性的任務或只需要快速的答案,也就不用花腦力與時間去找冷門工具學高深技巧了...

# by 小黑

有點意思

Post a comment