如何在Linux上使用sed从文件名中获取值?

时间:2011-05-26 14:13:56

标签: linux sed

如何从以下文件名中分别检索每个部分? DSA4020_frontcover_20346501_2011-05.doc

我想检索以下信息;

name = DSA4020

type = frontcover

id = 20346501

date = 2011-05

是否可以使用sed ??

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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

答案 2 :(得分: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