Naj*_*hin 8 sed text-processing
我有很多 HTML 文件包含带格式的日期 July 29th, 2011
我想将日期格式更改July 29th, 2011为20110729、December 9th, 2010到20101209等。
我认为sed可能有效,但由于其间接顺序仍然找不到解决方案。
这种事情比使用大多数工具要困难得多。GNUawk和 Perl 的 POSIX 模块都为您提供了一个strftime(),但没有提供strptime()您想要的 。
无论如何,使用 Perl 仍然很容易......
$ perl -MDate::Manip -lpe '$_=UnixDate(ParseDate($_), "%Y%m%d")' <<END
> July 29th, 2011
> December 9th, 2010
> END
20110729
20101209
Run Code Online (Sandbox Code Playgroud)
显然还有更多内容,因为您实际上想要转换 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"
Run Code Online (Sandbox Code Playgroud)