我想從多個日誌文件中grep一個模式,這些日誌文件會被某些進程不斷更新並尾隨grep連續輸出。 下面命令不工作,我得到 - 尾:警告:無限期跟隨標準輸入無效尾多個文件和grep的輸出
tail -f | grep --line-buffered "Search this: " /var/links/proc2/id/myprocess*/Daily/myprocess*.log
有人可以幫助解決了這一點?
我想從多個日誌文件中grep一個模式,這些日誌文件會被某些進程不斷更新並尾隨grep連續輸出。 下面命令不工作,我得到 - 尾:警告:無限期跟隨標準輸入無效尾多個文件和grep的輸出
tail -f | grep --line-buffered "Search this: " /var/links/proc2/id/myprocess*/Daily/myprocess*.log
有人可以幫助解決了這一點?
你應該看看multitail
工具(安裝使用sudo apt-get install multitail
)
總之,使用multitail,您需要使用--mergeall
標誌在一個地方查看所有輸出
multitail --mergeall /var/links/proc2/id/myprocess*/Daily/myprocess*.log | grep --line-buffered "Search this: "
你可以做同樣沒有用grep
multitail -E "Search this: " --mergeall /var/links/proc2/id/myprocess*/Daily/myprocess*.log
要單獨查看輸出使用multitail,這會給文件名以及。
multitail -E "Search this: " /var/links/proc2/id/myprocess*/Daily/myprocess*.log
你使用的是什麼版本的multitail?我無法用Debian打包的版本grep輸出multitail:_multitail 5.2.13_ – Thor
@Thor更正了我的答案。 –
錯誤在於您將文件提供給grep命令而不是尾部。
尾部-f需要獲取文件作爲輸入。嘗試:
tail -f /var/links/proc2/id/myprocess*/Daily/myprocess*.log | grep --line-buffered "Search this: "
也得到文件名(但它不會像grep的輸出,它是):
tail /var/links/proc2/id/myprocess*/Daily/myprocess*.log | grep --line-buffered -e'^==> .* <==$' -e'Search this: '
謝謝。這部分工作,但我沒有得到的模式找到的文件名? – 212
這是一個有趣的問題,簡單的答案應該是:使用前綴交換機尾,但遺憾的是目前這不是在tail
大多數版本中實現。
正如我所看到的,您有兩種選擇:使標準工具適應任務(請參閱Udys answer)或使用您最喜愛的腳本/編程語言編寫自己的工具。
以下是您可以使用File::Tail::Multi
模塊爲perl
執行此操作的一種方法。請注意,您可能需要從CPAN安裝模塊(cpan -i File::Tail::Multi
)。
保存以下腳本,例如mtail
添加到您的可執行文件路徑並使腳本可執行。
#!/usr/bin/env perl
use File::Tail::Multi;
$| = 1; # Enable autoflush
$tail = File::Tail::Multi->new(RemoveDuplicate => 0,
OutputPrefix => 'f',
Files => \@ARGV);
while(1) { $tail->read; $tail->print; sleep 2 }
變化OutputPrefix
到'p'
如果你喜歡全路徑前綴。
運行這樣的:
mtail /var/links/proc2/id/myprocess*/Daily/myprocess*.log | grep --line-buffered "Search this: "
你並不需要指定--line-buffered
時grep
爲最後一個命令,所以這是足夠了:
mtail /var/links/proc2/id/myprocess*/Daily/myprocess*.log | grep "Search this: "
1)這與使用multitail有什麼不同? 2)是否按文件名輸出,如OP在@Udys中的評論中所要求的答案> –
@ ansh0l:1)multitail以curses輸出其結果,這是不可糾正的。 2)是的,每行都有始發文件的名稱。 – Thor
好的,詛咒+1。但是使用-E標誌的多字節標誌,你不需要執行grep本身。 –
重複的http://superuser.com/questions/59471/simple-use-tail-grep-multiple-conditions –