2015-06-03 50 views
2

我一直在學習shell腳本和正則表達式。 我想找到一種方法從下面的文件名中提取特定的部分。使用正則表達式和Shell腳本

profiles_060315091024_30398-r-00006.avro 

我想從文件名中提取數字30398。

由於使用awk

回答

1

str='profiles_060315091024_30398-r-00006.avro' 
awk -F'[_-]' '{print $3}' <<< "$str" 
30398 

-F'[_-]'被設置自定義字段分隔符作爲_-

+0

我將不得不改變一些東西,如果我想保存數字「30398」在一個變量?對不起,我應該在最初的問題中提出這個問題。 – danilo

+0

你可以這樣做:'myvar = $(awk -F'[_-]''{print $ 3}'<<<「$ str」)' – anubhava

+1

非常感謝。是否需要'{print $ 3}'?它是幹什麼用的? – danilo

0

僅使用殼。我假設你想要下劃線和連字符之間的數字。

  1. 正則表達式(慶典專用)

    filename=profiles_060315091024_30398-r-00006.avro 
    if [[ $filename =~ _([0-9]+)- ]]; then num=${BASH_REMATCH[1]}; fi 
    echo $num 
    # => 30398 
    
  2. 使用參數擴展(任何POSIX殼)

    tmp=${filename##*_} # remove from the start up to last underscore 
    tmp=${tmp%%-*}  # remove the first hyphen until end of string 
    echo $tmp 
    # => 30398