使用 sed 更改输出格式

使用 sed 更改输出格式

如何使用 sed 更改文本文件的输出格式?

当我调用 cat 时,我的文本文件包含并显示以下内容:

9/27/2002
9/28/2002
10/1/2002
10/2/2002
10/10/2002
10/11/2002
12/29/2002
1/1/2003
1/2/2003

我希望它使用 sed 像这样显示(删除“/”,添加空格,并在日期和月份中添加零):

2002 09 27
2002 09 28
2002 10 01
2002 10 02
2002 10 10
2002 10 11
2002 12 29
2003 01 01
2003 01 02

任何帮助都感激不尽!

答案1

sed从 @chorba 获得了一个很好的解决方案,以下是使用 awk 实现此解决方案的方法:

awk -F/ '{printf "%d %02d %02d\n", $3, $1, $2}'

答案2

使用捕获组。第一部分改变数字的顺序,第二部分向第二列添加零,第三部分向第三列添加零。

sed -e 's=\(.*\)/\(.*\)/\(.*\)=\3 \1 \2=' -e 's= \(.\) = 0\1 =' -e 's= \(.\)$= 0\1='

答案3

如果你可以接受非 sed 的解决方案(为什么要局限于 sed?),下面是规范的perl解决方案,除了awk一:

perl -laF/ -ne 'printf "%s %02d %02d\n", @F[2,0,1]'

解释:

-a    auto-splits the input into the array @F
-l    strips newline on input
-F/   defines input delimiter to split on
-n    loops over all lines of input
-e    perl expression to run in each loop pass

printf       self explanatory

您可以将输入作为文件名传递到 perl 调用之后,也可以通过标准输入传递。

相关内容