1

Как я могу получить каждую часть отдельно от следующего имени файла?

DSA4020_frontcover_20346501_2011-05.doc

Я хочу получить информацию, как показано ниже:

name = DSA4020
type = frontcover
id =  20346501
date = 2011-05

Возможно ли сделать это с помощью sed?

5 ответов5

1

Как насчет этого sed рецепта.

echo "DSA4020_frontcover_20346501_2011-05.doc"  \
 | sed 's|\([^_]*\)_\([^_]*\)_\([^_]*\)_\([^\.]*\).*|name=\1,type=\2,id=\3,date=\4|'

дает эту красивую форму CSV,

name=DSA4020,type=frontcover,id=20346501,date=2011-05
0

Попробуй это:

echo "DSA4020_frontcover_20346501_2011-05.doc" | awk -F '_' '{print " name =" $1 "\n type =" $2 "\n id =" $3 "\n date =" $4 } '

вывод будет таким:

name = DSA4020
type = frontcover
id = 20346501
date = 2011-05
0

Вы можете использовать следующее для разделения на каждый _ после удаления расширения:

$ echo "DSA4020_frontcover_20346501_2011-05.doc" | cut -d. -f-1 | cut -d_ -f1
DSA4020

Замените самую последнюю цифру на 2, 3, 4, чтобы получить индивидуальное значение каждый раз.

0

Если количество полей является постоянным:

for i in 1 2 3 4 5; do  
    VARS[${i}]=$(echo ${yourfilename} | cut -d _ -f${i})
done

Затем получите доступ к $ {VARS [i]} ...

Альтернатива:

VARS[${i}]=$(echo ${yourfilename} | awk -v i=${i} -F_ '{print $i}'

И если поддерживается (Bash 3+)

for i in {1..5}; do (...)

Если у вас есть несколько имен файлов, просто добавьте цикл for чтобы просмотреть все из них.

0

Разделите имя файла и сохраните в позиционных параметрах:

set -- $(sed 's/_/ /g' <<< ${filename%.doc})
name=$1
type=$2
id=$3
date=$4

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .