2011-05-26 25 views
2

如何從以下文件名分別檢索每個部分? DSA4020_frontcover_20346501_2011-05.doc如何在Linux上使用sed從文件名獲取值?

我想檢索如下信息;

名稱= DSA4020

類型= frontcover

ID = 20346501

日期= 2011-05

是有可能做的sed ??

+0

問題也問的[超級用戶](http://superuser.com/q/288954/4714) – 2011-05-26 15:43:37

回答

5

是的,你可以:

pax$ echo 'DSA4020_frontcover_20346501_2011-05.doc' | sed 
    -e 's/^/name=/' 
    -e 's/_/\ntype=/' 
    -e 's/_/\nid=/' 
    -e 's/_/\ndate=/' 
    -e 's/\..*//' 
name=DSA4020 
type=frontcover 
id=20346501 
date=2011-05 

這是所有在同一行,我只是把它分解爲可讀性。

你也可以用awk做,如果你想:

pax$ echo 'DSA4020_frontcover_20346501_2011-05.doc' 
    | awk -F_ '{print "name="$1"\ntype="$2"\nid="$3"\ndate="substr($4,1,7)}' 
name=DSA4020 
type=frontcover 
id=20346501 
date=2011-05 
+0

對於awk,你可以將FS設置爲'[._]',而不必擔心特別處理4美元。 – 2011-05-26 15:47:25

4

awk可能是一個更好的選擇

# f=DSA4020_frontcover_20346501_2011-05.doc 
# name=$(echo $f | awk -F_ '{print $1}') 
# echo $name 
DSA4020 
# type=$(echo $f | awk -F_ '{print $2}') 
# echo $type 
frontcover 
+0

用於'awk'的+1。這項工作的正確工具。 – 2011-05-26 14:20:36

+0

太好了,謝謝你。 – Himalay 2011-05-26 17:00:39

2

在純bash的

FILE="DSA4020_frontcover_20346501_2011-05.doc" 
eval $(echo $FILE |(IFS="_";read a b c d; echo "name=$a;type=$b;id=$c;date=${d%.doc}")) 
echo Name:$name Type:$type ID:$id DATE:$date 
相關問題