답변에서 질문을 업데이트했습니다.
이제 다음과 같습니다.
$ 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;
}'