有人可以建议一个快速的oneliner 在unix 中将20111214 转换为2011.12.14 吗?

发布于 2024-12-21 07:15:35 字数 175 浏览 0 评论 0原文

我认为这应该可以在 sed/awk 中完成,对吧?将以下列表转换为 2011.08.01 ...等等

20110801
20110802
20110803
20110804
20110805
20110808

只是不够聪明,无法弄清楚如何做

任何建议?

i think this should be do-able in sed/awk, right? convert the following list to 2011.08.01 ... etc

20110801
20110802
20110803
20110804
20110805
20110808

just not smart enough to figure out how to do it

any suggestiongs?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

深海蓝天 2024-12-28 07:15:35

使用 GNU 日期:

    for date in 20110801 20110802 20110803 20110804 20110805 20110808; do
            date -d "$date" +%Y.%m.%d
    done

它会在无效日期时崩溃。

Using GNU date:

    for date in 20110801 20110802 20110803 20110804 20110805 20110808; do
            date -d "$date" +%Y.%m.%d
    done

It barfs on invalid date.

梦途 2024-12-28 07:15:35
date -d '20111214' +'%Y.%m.%d'

输入字符串可以接近可以识别为日期的所有内容。

date -d '20111214' +'%Y.%m.%d'

The inputstring can be close to everything which can be identified as a date.

疾风者 2024-12-28 07:15:35
export V=20111010;echo ${V:0:4}.${V:4:2}.${V:6:2}

所以对于你的情况,类似:

while read x; do echo ${x:0:4}.${x:4:2}.${x:6:2}; done
export V=20111010;echo ${V:0:4}.${V:4:2}.${V:6:2}

So for your case, something like:

while read x; do echo ${x:0:4}.${x:4:2}.${x:6:2}; done
洛阳烟雨空心柳 2024-12-28 07:15:35

这可能对你有用:

 sed 's/../.&/3g'

This might work for you:

 sed 's/../.&/3g'
笔落惊风雨 2024-12-28 07:15:35

在 sed 中:

sed 's/\(....\)\(..\)\(..\)/\1.\2.\3/'

正如 potong 在评论中指出的那样,实际上没有必要指定所有三个组。你可以改为使用

sed 's/\(....\)\(..\)/\1.\2./'

In sed:

sed 's/\(....\)\(..\)\(..\)/\1.\2.\3/'

As pointed out by potong in a comment, it's not actually necessary to specify all three groups. You could instead use

sed 's/\(....\)\(..\)/\1.\2./'
尘曦 2024-12-28 07:15:35

呆呆地

gawk '/^[0-9]+$/{print substr($0,1,4)"."substr($0,5,2)"."substr($0,7,2)}' input.txt

gawk

gawk '/^[0-9]+$/{print substr($0,1,4)"."substr($0,5,2)"."substr($0,7,2)}' input.txt
请别遗忘我 2024-12-28 07:15:35

对于 awk,当你有 printf 时为什么要使用 substr 呢?

awk 'NF{printf("%.4s.%.2d.%.2d\n", $1, $1%10000/100, $1%100)}'

For awk, why substr when you have printf??

awk 'NF{printf("%.4s.%.2d.%.2d\n", $1, $1%10000/100, $1%100)}'
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文