Himalay
Himalay

Reputation: 131

How to use sed on Linux to get values from file name?

how to retrive every portion separately from following file name? DSA4020_frontcover_20346501_2011-05.doc

I want to retrieve informations as below;

name = DSA4020

type = frontcover

id = 20346501

date = 2011-05

is it possible to do with sed??

Upvotes: 2

Views: 1484

Answers (3)

clt60
clt60

Reputation: 63922

In pure 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

Upvotes: 1

paxdiablo
paxdiablo

Reputation: 881563

Yes, you can:

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

That's all on one line, I've just split it for readability.

You could also do it with awk if you wish:

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

Upvotes: 5

eduffy
eduffy

Reputation: 40224

awk may be a better choice

# 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

Upvotes: 4

Related Questions