linux - 是否可以在 sed 中使用匹配的字符串作为 shell date 命令的输入?

标签 linux shell unix date sed

我有一个文件,其中包含包含 GMT 偏移量的时间戳字段的记录。我想使用 sed 命令将记录上的值替换为常规时间戳(没有 GMT 偏移量)。

例如:

`$date -d '2012/11/01 00:50:22 -0800' '+%Y-%m-%d %H:%M:%S'`

返回这个值,这是我想要做的:

2012-11-01 01:50:22

除了我想对该文件的每一行执行该操作并将日期命令应用于时间戳值。这是一个示例记录:

"SB","6GV96644X48128125","","","","T0006",2012/10/03 13:08:43 -0700,"NJ"

这是我的代码:

head -1 myfile | sed 's/,[0-9: /\-]\{25\},/,'"`date -d \1 '+%Y-%m-%d %H:%M:%S'`"',/

这不起作用:它只是忽略\1 并将匹配的模式替换为今天的日期:

"SB","6GV96644X48128125","","","","T0006",2012-11-14 01:00:00,"NJ"

我希望 \1 会将匹配的模式传递给日期函数并返回一个常规时间戳值(如我在上面提供的示例中显示日期函数如何应用 GMT 偏移量并返回一个常规时间戳字符串)并将替换记录中的旧值。

最佳答案

我会改用awk。例如:

awk '{cmd="date -d \""$7"\" \"+%Y-%m-%d %H:%M:%S\"";
    cmd | getline k; $7=k; print}' FS=, OFS=, myFile

这会将第 7 个字段替换为对第 7 个字段的原始内容运行 date 命令的结果。

关于linux - 是否可以在 sed 中使用匹配的字符串作为 shell date 命令的输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13403163/

相关文章:

image - Unix:将 PDF 文件和图像合并为 PDF 文件?

linux - 在 Unix shell 中,如何检查用户的权限,如果用户没有权限,如何产生错误消息?

java - 在 ant build.xml 文件中检索类路径值

linux - ltrace()如何显示rand()

python-3.x - 如何对 django 项目进行 cythonize?

c - 套接字未收到消息 AF_UNIX

linux - 从系统规范生成内核配置

linux - 如何授予 Nagios 权限以在自定义脚本中运行某些命令?

python - 无法通过管道命令访问 django shell 中的导入函数?

c++ - 有没有办法定位进程的哪一部分使用了最多的内存,只查看生成的核心文件?