簡體   English   中英

ls和正則表達式linux

[英]ls and regular expression linux

我有兩個目錄:

  1. run.2016-02-25_01.
  2. 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.

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