![使用 sed 更改输出格式](https://linux22.com/image/1360361/%E4%BD%BF%E7%94%A8%20sed%20%E6%9B%B4%E6%94%B9%E8%BE%93%E5%87%BA%E6%A0%BC%E5%BC%8F.png)
如何使用 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 调用之后,也可以通过标准输入传递。