如何使用 awk(或 sed 等)将文本文件列中的“yyyy-mm-dd”转换为“dd.mm”?

如何使用 awk(或 sed 等)将文本文件列中的“yyyy-mm-dd”转换为“dd.mm”?

假设文本文件中有以下一行:

...
2018-09-13    5555    33-33    Some_string
...

我需要将第一列(日期为yyyy-mm-dd)更改为其他格式(dd.mm,删除年份),但不触及其他列:

...
13.09    5555    33-33    Some_string
...

我如何使用awk(或sed等)以编程方式执行此操作?

答案1

可能的解决方案

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

这些多个点可能不够优雅;该命令并不关心它是否处理数字;它也不关心第一“列”中是否还有其他内容。这些问题可以通过更复杂的方法来解决,但就其当前形式而言,该命令非常简单。

常规命令用sed 's/A/B/'替换模式,每行最多一次。AB

在这种情况下,A包括:

  • ^– 线标记的开始,
  • ....– 正好四个字符,
  • -– 字面意思-
  • (..)– 后面恰好引用了两个字符\1
  • -– 字面意思-
  • (..)– 后面恰好引用了两个字符\2

并且B

  • \2()–无论第二个是什么A
  • .– 字面意思.
  • \1()–无论第一个是什么A

此外()被转义\

要处理文件,请将其添加为最后一个参数。要就地处理文件,请使用-i,例如

sed -i 's/^....-\(..\)-\(..\)/\2.\1/' myfile.txt

相关内容