Linux

正則表達式以擷取具有特定結構的文件夾名稱

  • January 23, 2018

用這種結構擷取文件夾名稱的正則表達式是什麼

xxxx-x ( x - 整數 )

ls /usr/hdp | .....
2.6.0.3-8  current HG_MASTER 2.4.3 34.1 45-995

預期產出

2.6.0.3-8



ls -lh /usr/hdp/
total 8.0K
drwxr-xr-x. 27 root root 4.0K Jan  1 15:24 2.6.0.3-8

由於您標記了bash,您實際上可以使用擴展的 glob 通過 shell 的文件名匹配來做到這一點:

$ shopt -s extglob
$ touch /some/path/{2.6.0.3-8,22.66.0.333-8,foobar}
$ printf "%s\n" /some/path/+([0-9]).+([0-9]).+([0-9]).+([0-9])-+([0-9])
/some/path/22.66.0.333-8
/some/path/2.6.0.3-8

那裡的模式就像更常見的東西,比如*or *.png,所以你可以把固定的部分像路徑一樣粘在裡面。添加尾部斜杠/以僅匹配目錄。(不過,斜線也確實出現在輸出中。)

在 ERE 正則表達式中,模式與[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+-[0-9]+. 更模糊的版本只會檢查允許的字元,例如+([-.0-9])(或[-.0-9]+在 ERE 中),但當然也會匹配例如123..456.

如果您只想列印文件名,find可能會更容易,但如果您想對它們執行命令,那麼 shell 循環也是一個選項(連同find -exec)。

引用自:https://unix.stackexchange.com/questions/418806