假设文本文件中有以下一行:
...
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/'
替换模式,每行最多一次。A
B
在这种情况下,A
包括:
^
– 线标记的开始,....
– 正好四个字符,-
– 字面意思-
,(..)
– 后面恰好引用了两个字符\1
,-
– 字面意思-
,(..)
– 后面恰好引用了两个字符\2
。
并且B
是
\2
()
–无论第二个是什么A
,.
– 字面意思.
,\1
()
–无论第一个是什么A
。
此外(
和)
被转义\
。
要处理文件,请将其添加为最后一个参数。要就地处理文件,请使用-i
,例如
sed -i 's/^....-\(..\)-\(..\)/\2.\1/' myfile.txt