尋找包含文字的文件,但將其不同部分報告為結果

尋找包含文字的文件,但將其不同部分報告為結果

我想查找 IMAP 資料夾中包含特定文字的所有電子郵件(即:發送到特定電子郵件地址的郵件)。我已經發現我可以透過使用 grep 來做到這一點,如下所示:

grep -rnw '~/users/example' -e "[email protected]"

這將傳回符合的文字或檔案名稱(帶有-l)。但我的任務真正需要的是知道找到的電子郵件文件的「標題」。

/home/example/users/example/.Archives.2013/cur/1364614080.4080.example.com:2,Sa
/home/example/users/example/.Archives.2013/cur/1385591317.91317.example.com:2,RSa
/home/example/users/example/.Archives.2013/cur/1358235054.35054.example.com:2,S
/home/example/users/example/.Archives.2013/cur/1358445545.45545.example.com:2,S
/home/example/users/example/.Archives.2013/cur/1453119248.M330746P8611.example.com,S=6761,W=6915:2,S

因此,我以某種方式需要根據上面的 grep 查找文件,但列出的結果應該是同一文件的不同部分(也許使用正則表達式?)。

我該怎麼辦?

答案1

使用formail(隨 一起提供procmail):

find ~/users/example -type f -exec sh -c '
  for email do
    formail -x to -x cc < "$email" |
      grep -qF [email protected] &&
      formail -cx subject < "$email"
  done' sh {} +

也就是說,對於每個電子郵件文件

  • 提取ToCc標頭
  • [email protected]在那裡尋找
  • 如果找到,則提取Subject標題並將其列印在一行上(帶有-c)。

答案2

文件的「標題」、路徑或名稱是什麼?使用 --files-with-matches 選項或 -l 列出符合的檔案名稱。如果您僅搜尋固定字串而不是正規表示式,請使用 -F 加快流程

grep -F -r -l [email protected] ~/users/example

要匹配文件的其他內容,grep 找到的文件清單(fgrep 與 grep -F 相同):

fgrep -rl [email protected] ~/users/example | xargs grep '^Subject:'

提示:許多命令在第一個參數停止選項解析,而無需減號字元。所以所有選項都應該先呼叫。

答案3

mutt

muff -f ~/users/example/.Archives.2013

(假設這是一個 maildir 資料夾)。在 中mutt,鍵入l(小寫L)。

根據Limit to messages matching:提示輸入:

~C [email protected]

(雖然嚴格來說,因為它是一個正規表示式,所以應該是~C 'my@example\.com'字面.匹配的)。

或開始mutt為:

mutt -f ~/users/example/.Archives.2013 -e 'push "l ~C [email protected]"'

~CTo:在和標題中搜尋Cc:

查看手冊對於搜尋語法。

若要同時搜尋多個郵箱,您可以使用多個郵件索引器(內部mutt或外部)。看https://dev.mutt.org/trac/wiki/UseCases/SearchingMail例如。

相關內容