日付を「2011年7月29日」から「20110729」に変更


8

フォーマット付きの日付を含むHTMLファイルがたくさんあります July 29th, 2011

私は、日付の書式を変更するJuly 29th, 2011には20110729December 9th, 2010する20101209など、

sedはうまくいくかもしれませんが、その間接的なシーケンスのために解決策を見つけることができません。


あなたはより良いオフに別の日付形式と出力を読み取ることができるのperlとのことだが、私のperl-fooが十分に良い、でうまくいけば他の誰かの意志チップではありません。
EightBitTony

回答:


7

この種のことは、ほとんどのツールの場合よりもはるかに困難です。GNU awkとPerlのPOSIXモジュールはどちらもを提供しますがstrftime()strptime()は提供しません。

いずれにせよ、Perlを使用するのはまだ簡単です...

$ perl -MDate::Manip -lpe '$_=UnixDate(ParseDate($_), "%Y%m%d")' <<END
> July 29th, 2011
> December 9th, 2010
> END
20110729
20101209

実際にHTMLを変換したいので、明らかに他にもあります。日付文字列を見つけるために機能するsedを使用した正規表現を理解できる場合は、Perlを使用して非常によく似たことができるはずです。

$ perl -MDate::Manip -lpe 's/(")([^"]+)(")/$1 . UnixDate(ParseDate($2), "%Y%m%d") . $3/ge' <<END
dates enclosed "July 29th, 2011" in quotes
"December 9th, 2010"
END
dates enclosed "20110729" in quotes
"20101209"

どこで/どのようにDate::Manipモジュールを入手できますか?...私のperlは、「@ INCでDate / Manip.pmが見つかりません...」というエラーを表示します。どういうわけかインストールする必要がある追加のモジュールですか?...私はperl、v5.10.1を使用しています
Peter.O

@fred:ほとんどのディストリビューションパッケージマネージャーにはこれがあります。そこで検索してみてください。私のシステムではパッケージ名はですperl-Date-Manipが、パッケージ名は異なります。を使用して取得することもできcpanます。
カレブ2011

@StevenPritchard:あなたは良い有用な答えを書いてくれます。このコミュニティの周りであなたに会えてうれしいです。このコミュニティーが機能し続けるためには投票依存していることに注意したい。投票は回答を並べ替えるのに役立つだけでなく、どこに何が表示されるか、検索結果を変更することでサイトを形成し、最も重要なことに、優れたユーザーをサイトの警戒態勢に保つのに役立ちます。投票なしでは死にます。合計3票しか投票できません。毎日使用できる30が与えられます!あなたが貴重であるかどうかについて投票して、このサイトを改善するためにあなたの知識を利用することを検討してください。
カレブ2011

@Caleb:ありがとう。それはUbuntuのリポジトリにlibdate-manip-perl...としてあります。@ Steven Pritchard:それは素晴らしいソリューションです...ありがとう。
Peter.O 2011

1
GNU dateには解析と印刷の両方がJuly 29th, 2011ありますが、認識された形式(July 29, 2011動作)ではありません。そのため、かなりのシェルとsed / awkインフラストラクチャを配置する必要があります。
Gilles「SO-邪悪なことをやめなさい」
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.