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


0

让我们考虑一下,文本文件中包含以下行:

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

我需要在不触摸其他列的情况下将第一列(日期yyyy-mm-dd格式为)更改为其他格式(dd.mm,删除年份):

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

如何使用awk(或sed等)以编程方式做到这一点?

Answers:


2

可能的解决方案

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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.