[英]ls and regular expression linux
我有兩個目錄:
run.2016-02-25_01.
run.2016-02-25_01.47.04
這兩個目錄都位於名為gte
的通用目錄下。
我想要一個沒有點號結尾的目錄.
。
我正在使用以下命令,但是,我無法使其工作:
ls run* | grep '.*\d+'
命令無法找到任何東西。
shell全局中的否定字符集使用!
不是^
:
ls -d run*[!.]
( ^
曾經是|
的古老同義詞。)- -d
選項列出目錄名稱,而不是這些目錄的內容。
您嘗試使用:
ls run* | grep '.*\d+'
需要啟用PCRE的grep
和PCRE regex選項( -P
),並且您正在尋找零個或多個任何字符,后接一個或多個數字,這不是您想要的。 您可以使用:
ls -d run* | grep '[^.]$'
不需要PCRE正則表達式,但是簡單地使用正確的名稱作為shell glob可能是最好的。
如果你擔心,有可能不是一個名字開始run
,並具有比其他點結束的東西,你應該考慮shopt -s nullglob
,正如上文Anubhava的答案 。 但是,請注意下面在hek2mgl和我自己之間有關ls
命令和shopt -s nullglob
的潛在混亂行為的討論。 如果您使用的是:
for name in run*[!.]
do
…
done
那么shopt -s nullglob
是完美的; 當glob表達式不匹配時,循環迭代零次。 如果glob表達式是ls
命令的參數,而ls
在沒有命令行參數的情況下提供默認行為,那么效果就不好了。
您不需要grep
。 只需使用:
shopt -s nullglob
ls -d run*[0-9]
如果您的目錄並非總是以數字結尾,請使用extglob
:
shopt -s nullglob extglob
ls -d run*+([^.])
或列出不帶DOT的run*
目錄中的所有條目:
printf "%s\n" run*+([^.])/*
這有效...
ls|grep '.*[^.]$'
就是說我想要任何數量的東西,但是我希望行尾之前的最后一個字符是除了句點之外的任何東西。
我會用find
find -regextype posix-awk -maxdepth 1 -type d -regex '-*[[:digit:]]+$'
列出不以結尾的目錄.
。
ls -d run* |grep "[^.]$"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.