我試圖尋找文本Elapsed time
內的特定日誌文件名vsim.log
。我不熟悉的grep,但一些谷歌搜索後,我發現grep -r
將允許我做遞歸搜索和grep -r "Elapsed time"
將對我的目錄中的所有文件中的該短語進行遞歸搜索。根據這個鏈接,我可以做grep -r "Elapsed time" ./vsim*
遞歸搜索文件的目錄,從vsim
開始,並查看這些文件的Elapsed time
。但是,當我試着這個我得到grep: No match.
,我知道是不正確的,因爲我知道那些關鍵字存在的文件。我在搞什麼?使用grep遞歸搜索特定關鍵字內的特定文件名的子目錄
回答
從我的評論繼續,您可以使用find
來定位文件vsim.log
如果你不知道它的確切位置,然後使用-execdir
選項find
到grep
文件,任期Elapsed time
,例如
find path -type f -name "vsim.log" -execdir grep -H 'Elapsed time' '{}' +
這將返回文件名以及匹配的文本,您可以根據需要簡單地解析文件以隔離文件名。通過將find
命令的結果反饋到while read -r
循環中,您可以處理所有匹配的文件(如果您預計有多個文件匹配)。
while read -r match; do
# process "$match" as desired
echo "Term 'Elapsed time' found in file ${match%:*}"
done < <(find path -type f -name "vsim.log" -execdir grep -H 'Elapsed time' '{}' +)
其中:
find
是瑞士軍刀爲您的系統上查找文件path
可以是任何相對或絕對路徑搜索(例如$HOME
或/home/dorojevets
)來搜索你的home目錄選項
-type f
告訴找只查找文件(見man find
的鏈接處理)選項
-name "foo"
告訴找到只名爲foo
找到文件的所有文件(通配符允許)的
-exec
和-execdir
選項允許用戶執行對每個文件(由'{}'
表示)下面的命令的
grep -H 'Elapsed time' '{}'
是對每個文件名執行命令的
+
是什麼告訴find
它已達到(與-exec
使用\;
)命令最後的結束時,
${match%:*}
參數擴展上的變量$match
用於解析filename
fromfilename:Elapsed time
通過grep -H
返回(只是被用來從$match
右邊修剪一切,第一:
的%:*
)
給一個嘗試和執行時間比較文件樹的遞歸grep
。如果您知道包含所需信息的文件名的某些部分(或文件模式時間或權限集合等),那麼您在此討論中可能會丟失的內容是您使用的是find
。它可以在文件樹中搜索數百萬個文件,比每個文件遞歸地遞歸grep
快得多。如果你不知道什麼文件可能包含所需的信息 - 然後使用grep
,只需等待...
這會在我執行的文件中,還是我將整個事件輸入終端? – dorojevets
您只需將其輸入到您的終端或將其包含在腳本中即可。 Bash非常靈活。您可以在命令行上執行任何操作,您可以放入腳本,反之亦然......如果在腳本中使用,請在第一行包含'#!/ bin/bash',告訴解釋器使用'bash'而不是其他一些shell。我更新了'while'循環來吐出包含任何'Elapsed time'匹配文件的完整路徑作爲例子。 –
我也刪除了'tmp',它只是我用來確認行爲的目錄名稱。實際上,你告訴'find'開始搜索,例如'find/path/to/search'(它會遞歸搜索下面的所有內容)。它可以是*相對*或*絕對*路徑。如果你在整個根文件系統上運行'find',那麼包括'-mount'選項以防止搜索可能包含很多不是文件的'/ dev','/ proc'和'/ sys'系統目錄。 –
嘗試:
grep -r "Elapsed time" * --include vsim.log
還是這個答案Use grep --exclude/--include syntax to not grep through certain files。
我寧願'''在'*'在這裏(沒有「命令行太長」的機會,沒有機會匹配看起來像grep選項的東西,沒有不一致的頂層隱藏文件跳過) –
- 1. 遞歸展開和搜索特定子目錄的模式
- 2. 在目錄中遞歸搜索具有特定擴展名的文件
- 3. 搜索帶有特定目錄及其子目錄路徑的特定文件
- 4. 具有特定擴展名的文件的遞歸搜索
- 5. PHP - 搜索特定文件的目錄和子目錄?
- 6. 如何在特定目錄結構下以遞歸方式grep特定文件名中的文本?
- 7. 使用find以非遞歸方式在目錄中搜索特定文件。 AIX
- 8. 在特定日期使用關鍵字的Grep文件(UNIX)
- 9. 如何從特定目錄和所有子目錄中搜索特定擴展名的文件
- 10. 搜索特定關鍵字MySQL
- 11. 遞歸搜索子目錄
- 12. 搜索目錄中的特定文件名
- 13. 使用python的os.walk搜索特定的目錄名稱?
- 14. 搜索目錄中包含特定文件的目錄?
- 15. 如何從文本文件中搜索關鍵字/特定詞?
- 16. Grep搜索特定字符故障
- 17. Lotusscript搜索窗口目錄的子目錄和文件。遞歸?
- 18. 遞歸的grep搜索文件中的特殊本地字符(C++運算符)
- 19. facebook graph api - 如何搜索帖子中的特定關鍵字
- 20. grep的搜索特定的模式
- 21. 是否可以搜索目錄內的特定目錄?
- 22. Grep以遞歸方式處理特定子文件夾組中的文件
- 23. 如何使用Perl在目錄中搜索特定文件?
- 24. 遞歸搜索grep
- 25. 搜索Linux中特定內容的目錄中的MS字文件
- 26. 指定多個目錄遞歸搜索
- 27. 在目錄內搜索特定字符串的腳本
- 28. 獲取遞歸目錄中的特定文件
- 29. 遞歸創建特定目錄中的文件夾
- 30. PowerShell顯示特定文件夾名稱的遞歸內容
爲什麼不使用'find/path/to/search -type f -name「的結果vsim.log」 '然後搜索一個或幾個文件。它會更快。 –
@ DavidC.Rankin因爲我對Linux不是很熟悉,並且我還沒有真正意識到可用的功能,因爲我仍然在學習。也就是說,目前速度並不是太多的因素,但我一定會讀到發現,並且可能學會如你所說的去做。 – dorojevets
我提供了一個例子作爲答案。如果您還有其他問題,請告訴我。 –