Как отметить даты, которые были в прошлом?

Из ответов я уточнил вопрос:

Теперь это:

$ date "+%F %H:%M" 2014-06-04 11:26 

Это вход:

 $ cat input.txt <tr><td>2014-04-24 14:01</td><td>2014-06-04 11:30</td><td>2014-06-04 11:23</td></tr> 

Это текущий скрипт perl (который работает GREAT !, только часы / минуты)

 $ cat a.txt perl -MTime::Piece -pe ' BEGIN {$today = localtime->ymd} @days = $_ =~ /<td>(.+?)<\/td>/g; for $d (@days) { $_ =~ s!$d!<font style=BACKGROUND-COLOR:red>$d</font>!g if $d lt $today; }' input.txt 

И теперь он производит этот вывод:

 $ bash a.txt <tr><td><font style=BACKGROUND-COLOR:red>2014-04-24 14:01</font></td><td>2014-06-04 11:30</td><td>2014-06-04 11:23</td></tr> 

Наш вопрос : как мы можем отметить прошлые даты – часы: минуты тоже! – как красный? Текущее решение perl необходимо обновить, так как оно не отмечает красную «2014-06-04 11:23», но это минута!

ps: – несколько дат могут быть в одной строке – это работает
– прошлые дни, отмеченные как красные, – которые работают
– Я пытался использовать «datetime» вместо «ymd» ( http://perldoc.perl.org/Time/Piece.html ) – но это не сработало, возможно, из-за этого в input.txt есть "" вместо "\ t"? – + просто заметка (если это помогает), я уже узнал, как отметить завтра:

 sed -i "s/<td>\(`date +%F -d '+1 day'`\)/<td><font style=BACKGROUND-COLOR:lightgreen>\1<\/font>/g" in.txt 

2 Solutions collect form web for “Как отметить даты, которые были в прошлом?”

Другое решение perl , используйте модуль Time::Piece например, ответ @ choroba:

 $ perl -MTime::Piece -pe ' BEGIN {$today = localtime->ymd." ".localtime->hms} s!($1)!<font style=BACKGROUND-COLOR:red>$1</font>!g if /<td>(.+?)<\/td>/g and $1 lt $today; ' in.txt asfsaf<td><font style=BACKGROUND-COLOR:red></font> kjycasfd FKZF<td>2014-05-09 lkjafsa sdfg<td>2014-05-13 asdf sfjlaslfsaljf <td><font style=BACKGROUND-COLOR:red></font> DIJIZLOF 

Обновить

Если у вас несколько последних дат в одной строке, попробуйте:

 $ perl -MTime::Piece -pe ' BEGIN {$today = localtime->ymd." ".localtime->hms} @days = $_ =~ /<td>(.+?)<\/td>/g; for $d (@days) { $_ =~ s!$d!<font style=BACKGROUND-COLOR:red>$d</font>! if $d lt $today; }' in.txt <tr><td><font style=BACKGROUND-COLOR:red>2014-04-24 00:01</font></td><td>2014-06-24 00:01</td><td><font style=BACKGROUND-COLOR:red>2014-05-13 00:00</font></td></tr> 

объяснение

  • Мы сохраняем всю дату в строке в массиве @days .
  • Для каждой даты мы проверяем, меньше ли это, чем сегодня, а затем замените ее.

Решение Perl:

 < in.txt perl -MTime::Piece -pe ' BEGIN { $t = localtime->ymd } if (/([0-9]{4}-[0-9]{2}-[0-9]{2})/ and $1 lt $t) { s=($1)=<red>$1</red>=g }' 

В принципе, метод ymd Time :: Piece возвращает текущую дату в ожидаемом формате. Затем вы можете использовать сравнение простых строк для получения дат.

ОБНОВЛЕНИЕ : для обработки нескольких дат в строке вам необходимо изменить код:

 < in.txt perl -MTime::Piece -pe ' BEGIN { $t = localtime->ymd } push @d, $1 while /([0-9]{4}-[0-9]{2}-[0-9]{2})/g; for my $d (@d) { $d lt $t and s=($d)=<red>$1</red>=g; }' 
  • Чтение десятичных знаков в текстовом файле в 1D-массив
  • Преобразование вывода команды в csv с отметкой времени
  • Как вырезать часть из файла журнала?
  • Построить матрицу на основе значений другой матрицы
  • Объединение двух файлов с уникальным идентификатором
  • Симметричная разностная труба?
  • Как стандартизировать количество символов в столбце?
  • Как я могу разбить набор слов на пары, которые должны совпадать?
  • Присоединить несколько файлов с двумя пустыми строками?
  • Создание базы списка слов по возможным номерам / символам через Crunch в Kali Linux
  • Сценарий оболочки: текстовые файлы в массив
  • Interesting Posts

    badblocks принимает только 32-битное целое число как начальные / конечные значения

    Apache – разрешить доступ к папкам, начиная с /

    Linux как маршрутизатор: отправка сообщений ICMPv4 «net unreachable» и «host unreachable»

    «Найти» вывод относительно каталога

    Контекст файла SELinux, restorecon не изменяет «пользователь» Контекст

    Как добавить строку после n-го появления ключевого слова с помощью sed?

    ssh возвращает сообщение «Ошибка пересылки X11 не удалось на канале 1»

    Shell Script mktemp, каков наилучший способ создания временного именованного канала?

    Предполагаемое генерирование большого количества псевдослучайных данных

    Учет трафика / proc / net / dev

    что внутри папки слабого обновления?

    Длительный процесс труб в буфер обмена на mac

    Как Debian PTS обнаруживает, что есть новая версия upstream?

    ddrescue возобновляет операцию спасения в другой файл изображения

    Разделяет SID процессами * всегда * подразумевает их общий PGID?

    Linux и Unix - лучшая ОС в мире.