0

これは、これに似た質問です。

でも、シェルスクリプトが苦手なので、まだまだお願いしたいのですが…

私の状況は少し異なります。日付文字列はファイルにあります。

これらのファイル (700 以上) の名前は、msg00000.html から msg00721.html までです。それぞれに次のような行があります。

<li><em>Date</em>: Thu, 22 Jul 2010 00:44:57 +0800</li>

多くのグーグル検索の後、私は最終的にこれを使用してそれらを見つけました:

grep "<li><em>Date" msg00000.html | cut -d' ' -f2-7 | tr -d "</li>"

出力はまさに私が望むものです:

Thu, 22 Ju 2010 00:44:57 +0800

そして、私は usetouch -md "Thu, 22 Ju 2010 00:44:57 +0800" msg00000.htmlが mtime を変更できることを知っています。

ただし、それらを組み合わせるのを手伝ってくれる人はいますか?そして、これを723ファイルに対して行います...

ありがとう...

編集

さて、私は最終的に次の方法を見つけました。

for f in *.html; do touch -md "$(grep '<li><em>Date' $f | cut -d' ' -f2-7 | sed 's/<\/li>//')" "$f"; done

かなり長いコマンドです...

実は問題はtrコマンドにあります。-dパターンではなくを使用すると、すべての文字が削除されます。だから日付Thu, 22 Ju 2010 00:44:57 +0800がおかしい。である必要がありますThu, 22 Jul 2010 00:44:57 +0800。はい、によって削除された「l」がありませんtr -d。笑。

4

1 に答える 1

3
for i in {0..721}; do touch -md "`grep '<li><em>Date' $(printf 'msg%05d.html' $i) | sed -e 's#<[^>]*>##g' | cut -d' ' -f2-7`" $(printf 'msg%05d.html' $i); done

awk の第一人者がすぐに来て、20 文字でそれを行う方法を教えてくれると確信していますが、これでうまくいくはずです。

編集: 覚えておいてください、子供たち、インターネットで質問に答えようとするのではなく、睡眠をとることが重要です. このようなばかげた回答を投稿してしまいたくありませんよね?

于 2012-07-19T12:08:50.397 に答える