簡體   English   中英

bash 列出特定命名約定的文件

[英]bash list files of a particular naming convention

操作系統 - Linux (Ubuntu 20.04)

我有一個包含數千個文件的目錄。 文件名范圍從 a.daily.csv 到 abdaily.csv 到 abc.daily.csv 到 abc.d.daily.csv 到 ab881128414141888.8

我面臨的挑戰是僅列出 a.daily.csv 或 abdaily.csv 等等。 也就是說,以“daily.csv”為固定部分,我希望能夠用“。”通配它前面的內容。 作為字段之間的分隔符

我嘗試了一些通配符,例如? [a-zA-Z0-9] 等等,但無法實現。 請給我一些指導

請注意 a、b、c 等是我用來發布問題的占位符。 在現實世界中,a,b,c 是字母數字詞

例子 -

PAHKY.daily.csv
TYUI.GHJ.WE.daily.csv
WGGH.FGH.daily.csv
98KJL-GHR.YUI.daily.csv
67HJE.HJQ.ATD.HJ.daily.csv

如果我想列出所有類似 PAHKY.daily.csv 的文件,其中在 daily.csv 前面只有一個文件(點是分隔符),我該怎么做?

如果啟用extglob選項:

$ shopt -s extglob

您可以對零個或多個pattern使用擴展模式匹配運算符,例如*(pattern) 知道[^.]匹配除點以外的任何字符,這導致:

$ ls *([^.]).daily.csv
PAHKY.daily.csv

獲取所有a.daily.csv文件。 對於下一組:

$ ls *([^.]).*([^.]).daily.csv
WGGH.FGH.daily.csv  98KJL-GHR.YUI.daily.csv

等等。 如果要匹配一個或多個pattern而不是零個或多個模式,請將*(pattern)替換為+(pattern)

您將 grep 與 ls 一起使用,因為 grep 與正則表達式配合使用效果很好嘗試這樣的操作,

^a\.b\.c\.data\.csv$
ls | grep 'Your Expression'

事實上,您甚至可以在不使用管道的情況下使用find grep

這應該工作:

ls |grep -Po '([A-Za-z0-9\-\.]?)+.daily.csv'

解釋:

-P, --perl-regexp
-o, --only-matching
[A-Za-z0-9\-\.] --match the group of characters : (A-Z,a-z,0-9,-,.)
()  -- to capture a group
?   -- matches zero or one of the previous RE.
+   -- matches one or more of the previous RE

Output:

67HJE.HJQ.ATD.HJ.daily.csv
98KJL-GHR.YUI.daily.csv
PAHKY.daily.csv
TYUI.GHJ.WE.daily.csv
WGGH.FGH.daily.csv

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM