Text-Processing
如何標記過去的日期?
從答案中我更新了問題:
現在,它是:
$ 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”標記為紅色,但它是一個過去的日期!
ps:-多個日期可能在一行中-正在工作
-過去的日子標記為紅色-正在工作
-我嘗試使用“日期時間”而不是“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
另一種
perl
解決方案,使用Time::Piece
像@choroba’s answer這樣的模組:$ 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
數組的一行中。- 對於每個日期,我們檢查它是否小於今天然後替換它。