2016-05-31 58 views
3

我試過下面的命令來打印帶有製表符分隔的find命令的輸出。如何打印帶有製表符分隔的find命令的輸出

echo -e "\t"; find /usr/live/class/$client_abbr -name "$line.cls" -exec grep '^#include' {} \;

如果輸出所包含的行n個,僅第一行印刷有製表符分隔的,並且它不被施加到線的其餘部分。請讓我知道我如何修改上述命令在所有行前面都有選項卡。

+4

你可以通過sed管道:'find ... | sed's/^/\ t /'' –

+0

我的Spider Sense告訴我也可以從頭開始刪除'echo -e「\ t」;'運行命令的其餘部分,存儲中間結果(如果需要的話),然後遍歷它。然後對於每一行,'echo -e \ t'。但是,我喜歡正則表達式的方法。 –

回答

3

您可能會發現管道到xargs比使用-exec更有效。額外的引號-type f-print0分別爲了安全起見,用於指定您需要文件(而不是目錄)以及啓用帶有嵌入式白色空間的文件名。輸入grep輸出到sed(歸屬於Fischer的評論),您將得到您所需的信息。

find "/usr/live/class/$client_abbr" -type f -name "$line.cls" -print0 | 
    xargs -0 grep '^#include' | 
    sed 's/^/\t/' 
+0

嘿,好的。我喜歡。 –

+0

另一方面,如果你不需要*非必要的'-print0'選項來查找''find''或非標準的'-0'選項到'xargs',甚至''xargs'本身使用'find'的'-exec'初級。我不相信從這些效率中獲得的收益證明了明晰度和符合標準的損失。 –

+0

@John - YMMV - 對我來說速度有幫助。如果Vishnu有少量文件需要篩選,那麼'-exec'(或'-execdir')就足夠了。 –

相關問題