Bash 通过命令行修改文件中行的格式

Bash 通过命令行修改文件中行的格式,bash,awk,sed,Bash,Awk,Sed,我有一个包含制表符分隔日期的文件,格式为:20160101。我想修改所有行,使日期的结构改为2016-01-01。到目前为止,我一直在emacs中这样做,但当文件很大时,速度非常慢,我想看看是否有命令行选项 具体而言,当前看起来像这样的文件: 20160101 20160103 20160104 20160107 20160106 20160201 20160201 20160205 20160119 20160122 ...

我有一个包含制表符分隔日期的文件,格式为:
20160101
。我想修改所有行,使日期的结构改为
2016-01-01
。到目前为止,我一直在emacs中这样做,但当文件很大时,速度非常慢,我想看看是否有命令行选项

具体而言,当前看起来像这样的文件:

20160101      20160103
20160104      20160107
20160106      20160201
20160201      20160205
20160119      20160122
   ...           ...
将成为:

2016-01-01      2016-01-03
2016-01-04      2016-01-07
2016-01-06      2016-02-01
2016-02-01      2016-02-05
2016-01-19      2016-01-22
   ...           ...

我发现我需要把括号括起来。。否则,如果没有
-r
,你的正则表达式比我的要好,它们需要转义。我发现我需要转义括号。。否则,如果没有
-r
,您的正则表达式比我的要好,它们需要转义。
sed -r 's/([0-9]{4})([0-9]{2})([0-9]{2})/\1-\2-\3/g'
sed -e 's/2016\(..\)\(..\)/2016-\1-\2/g' input >output
sed 's/\([0-9]\{4\}\)\([0-9]\{2\}\)\([0-9]\{2\}\)/\1-\2-\3/g'