найти файл по дате, переданной в параметре

Вы можете сделать это, используя Perl, как показано:

Вход:

$ cat file
Location|1111|222222|333333|Doe|John|19900723|19900724|19900725

$ perl -lpe 's#\|\K([0-9]{8})(?=(?:(?:\|[0-9]{8}){0,2})$)#join "/", unpack "A4A2A2", $1#ge' file
Location|1111|222222|333333|Doe|John|1990/07/23|1990/07/24|1990/07/25

Пояснение:

  • -lустанавливает RS = ORS = "\n"
  • -pчитает входной файл в записи с установленным выше разделителем записей. Кроме того, выводит текущую запись на стандартный вывод перед чтением следующей.
  • -eприменяет код Perl, следующий за этой опцией, к каждой считываемой записи ($_).
  • regexнаходит 8-значные -числа, которым предшествует вертикальная черта и за которыми следуют не более двух соседей того же сорта, что и он сам, прежде чем он увидит конец строки. Они хранятся в захваченном виде в $1.
  • Теперь каждый захваченный $1распаковывается в соответствии с шаблоном A4A2A2, а затем эти шаблоны соединяются косой чертой.

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

$ perl -F'[|]' -pale '$_ = join "/", unpack "A4A2A2" for @F[-3..-1]; $_ = join "|", @F'
0
01.07.2020, 22:14
1 ответ

Вы очень близко. Удалите скобки, и все должно работать:

$ date +%Y%m%d -d "(2020-06-24)+1 days"
20200702

$ date +%Y%m%d -d "2020-06-24 +1 days"
20200625

Или, точнее

dt=20200614; # or 2020-06-14, either way works

file=$(date +"XYZ.ABC.M.%Y%m%d180200.batch" -d "$dt + 1 days");
echo $file;

XYZ.ABC.M.20200615180200.batch
0
18.03.2021, 23:23

Теги

Похожие вопросы