@webpixel

Как правильно составить regex pattern для grep?

Приветствую знатоки! Подскажите пожалуйста, как правильно составить pattern для grep, вроде получается, но почему то он срабатывает 2 раза.

Есть файлы с такими именами report_201508251025.txt

Задача:
Поиск файлов содержащих "report_" и извлечение даты для дальнейшей обработки.

Получаю в цикле все файлы и хочу получить год, делаю:
#!/bin/bash

for file in *; do
  full_date="$(echo $file | grep -o -E 'report_[0-9]{8}')"
  year="$(echo $full_date | grep -o -E '[0-9]{4}')"
  echo $year
done


В ответ получаю:
2015 0825

Почему то срабатывает 2 раза, где допускаю ошибку? Спасибо.
  • Вопрос задан
  • 272 просмотра
Решения вопроса 1
3vi1_0n3
@3vi1_0n3
Ошибку вы допускаете в том, что думаете, что grep остановится после нахождения первых 4 символов. На самом деле в той же самой строке будет еще одно совпадение - следующие 4 символа.
А если вам просто год надо получить, то тогда лучше так:
#!/bin/bash

for file in report_*; do
  echo ${file:7:4}
done
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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