回答で質問を更新しました。
今です:
$ 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>
私たちの問題A:過去の日付を表示する方法 - 時間:分! - 赤?現在、Perlソリューションは「2014-06-04 11:23」を赤で表示していませんが、すでに過去の日付であるため、更新が必要です!
PS: - 複数の日付を1行に入力できます。 - 操作
- 先日は赤で表示されます。 - 動作
- "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>
説明する
- 我々は配列の1行にすべての日付を保存します
@days
。 - 各日付について、今日より小さいことを確認してから交換してください。