Извлечение даты из имени файла в bash - PullRequest
0 голосов
/ 06 января 2020

У меня есть каталог, который содержит несколько файлов с именем в шаблоне abc12gddmmyyyy.zip. Я работаю в bash сценарии, и я хочу извлечь шаблон ddmmyyyy из имени файла. Может ли кто-нибудь, пожалуйста, помогите. Я новичок в linux среде. Спасибо

Sample code

for filename in data/*; do
    date=<This part needed>
    echo $date
done

Ответы [ 4 ]

1 голос
/ 06 января 2020

С bash и регулярным выражением:

[[ "$filename" =~ (.{8})\.zip$ ]] && date="${BASH_REMATCH[1]}"
1 голос
/ 06 января 2020

Есть, конечно, много решений. Одним из способов может быть использование sed:

date="$(echo "$filename" | sed -r 's/^.*12g([0-9]{8})\.zip/\1/')"
0 голосов
/ 06 января 2020

Вот еще один чистый bash параметр:

for filename in data/*.zip; do
    date="${filename: -12:8}"
    echo "$date"
done

Этот метод предполагает, что все ваши файлы имеют точно такой же шаблон, как вы описываете: <random_string>DDMMYYYY.zip. Поскольку дата начинается с 12-го символа сзади, мы можем извлечь ее как подстроку.

${parameter:offset:length} Расширение подстроки. Расширяется до length символов параметра, начиная с символа, указанного offset. Если offset оценивается как число меньше нуля, значение используется как смещение от конца значения параметра. Отрицательное смещение берется относительно единицы, превышающей максимальный индекс указанного массива. Обратите внимание, что отрицательное смещение должно быть отделено от двоеточия хотя бы одним пробелом, чтобы избежать путаницы с расширением :-.

source: man bash

примечание: имейте в виду, что формат даты типа DDMMYYYY не сортируется и, как правило, в один прекрасный день приведет к большому раздражению. Всегда полезно использовать сортируемые форматы, такие как YYYYMMDD

0 голосов
/ 06 января 2020

файлов:

ls ./files/
abc12g01022020.zip  abc12g02022020.zip

скрипт:

for file in ./files/*
do
  echo $file | awk -F'.zip' '{print $1}' | tail -c 9
done

вывод:

01022020
02022020

Хотя, если честно, это всего лишь один вариант использования сценарий, который вы нарисовали для нас.

...