如何從以下文件名分別檢索每個部分? DSA4020_frontcover_20346501_2011-05.doc如何在Linux上使用sed從文件名獲取值?
我想檢索如下信息;
名稱= DSA4020
類型= frontcover
ID = 20346501
日期= 2011-05
是有可能做的sed ??
如何從以下文件名分別檢索每個部分? DSA4020_frontcover_20346501_2011-05.doc如何在Linux上使用sed從文件名獲取值?
我想檢索如下信息;
名稱= DSA4020
類型= frontcover
ID = 20346501
日期= 2011-05
是有可能做的sed ??
是的,你可以:
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
對於awk,你可以將FS設置爲'[._]',而不必擔心特別處理4美元。 – 2011-05-26 15:47:25
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
用於'awk'的+1。這項工作的正確工具。 – 2011-05-26 14:20:36
太好了,謝謝你。 – Himalay 2011-05-26 17:00:39
在純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
問題也問的[超級用戶](http://superuser.com/q/288954/4714) – 2011-05-26 15:43:37