如何在Linux終端機中顯示包含特定字串的檔案的排序列表

如何在Linux終端機中顯示包含特定字串的檔案的排序列表

假設我在不同的目錄中有 3 個資料夾,其中一些包含更多子資料夾,並且在每個資料夾/子資料夾中我都有名為 、 等的文字文件test1test2其中以某種方式test3包含該字串。hello可以是正義hello,也可以是helloJASKFNASKFN等等。

如何顯示這些文件的排序清單?假設我想按名稱或修改日期排序。我確實知道我可以使用greporfind命令來搜尋和顯示這些文件,但我不確定如何以排序的方式顯示它們。

答案1

如果您先對文件清單進行排序,然後再將其傳遞給grep:,會更容易:

在 中zsh,您可以執行以下操作:

grep -le hello -- **/test<->(.)

它在目前工作目錄中或之下查找名稱後面跟著一個或多個十進制數字(是匹配數字範圍的模式的一種形式)hello的文件內容,跳過隱藏目錄。test<-><x-y>

預設情況下,全域擴充會按名稱排序。

若要按修改時間排序,請使用(.om)代替(.)。或(.oL)按尺寸。請參閱 參考資料 中的 全域限定符清單 以及限定符可以排序的info zsh qualifiers標準清單。o

替換oO以反轉順序(On按名稱反向排序)。

用於(.n)按數字名稱排序(test10在 後面test9,而不是在test1和之間test2)。

如果你遇到一個爭論太多execve()錯誤(大多數系統的系統呼叫限制導致):

autoload -Uz zargs # best in ~/.zshrc
zargs -- **/test<->(.) -- grep -le hello --

使用 GNU 工具和任何 shell(除了 (t)csh 之外,您需要將命令放在一行上):

按名稱排序:

LC_ALL=C find . -regextype posix-extended -name '.?*' -prune -o \
  -regex '.*/test[0-9]+' -type f -print0 |
  sort -z |
  xargs -r0 grep -le hello --

(新增-V選項以sort進行數字排序)

按修改時間排序:

LC_ALL=C find . -regextype posix-extended -name '.?*' -prune -o \
  -regex '.*/test[0-9]+' -type f -printf '%T@\t%p\0' |
  sort -zrn |
  cut -zf2- |
  xargs -r0 grep -le hello --

新增/刪除-rsort顛倒順序。

相關內容