在Linux上用格式化文本替换文本

时间:2014-09-23 15:14:09

标签: linux search replace awk sed

我正在寻找一种方法,用Linux命令或脚本替换文件中位置10和17之间的文本。例如,我想将日期文本20140101替换为01/01/2014。

我希望这可以在命令行的单个命令中使用sed或awk吗?

2 个答案:

答案 0 :(得分:3)

使用sed,您可以捕获将按原样放置的捕获组中的前9个字符。其余的将在3个捕获组中被打破,并根据您的需要重新安排。

类似的东西:

sed -r 's#(.{9})(.{4})(.{2})(.{2})#\1\3/\4/\2#' file

如果您使用的是没有GNU sed转义( ) { } \的系统。

答案 1 :(得分:2)

如果所有字符串都是日期,那么最好使用date命令:

$ date -d 20140101 +%m/%d/%Y
01/01/2014
$ date -d 20140923 +"%m-%d-%Y %a %b"
09-23-2014 Tue Sep

它是翻译许多日志文件中使用的1970年(unix epoch)秒数的特别好的工具:

$ date --date='@1411199063' +"%m-%d-%Y %H:%M:%S"
09-20-2014 07:44:23