과거의 날짜를 어떻게 표시하나요?

과거의 날짜를 어떻게 표시하나요?

답변에서 질문을 업데이트했습니다.

이제 다음과 같습니다.

$ 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 스크립트입니다(훌륭하게 작동합니다!, 몇 시간/분만 누락됨).

$ 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"을 빨간색으로 표시하지 않지만 과거 날짜이므로 업데이트해야 합니다!

추신: - 여러 날짜가 한 줄에 있을 수 있습니다. - 작동 중입니다.
- 빨간색으로 표시된 지난 날 - 작동 중입니다
. - "ymd" 대신 "datetime"을 사용하려고 했습니다(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

답변1

또 다른 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배열로 저장합니다.
  • 각 날짜에 대해 오늘보다 적은지 확인한 다음 교체합니다.

답변2

펄 솔루션:

< 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방법은계시기현재 날짜를 예상 형식으로 반환합니다. 그런 다음 일반 문자열 비교를 사용하여 과거 날짜를 얻을 수 있습니다.

업데이트: 한 줄에 여러 날짜를 처리하려면 코드를 변경해야 합니다.

< 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;   
    }'

관련 정보