我想在某些文件的每一行开头添加日期和时间
我使用 sed 在文件中的每一行前添加日期和时间
请建议我需要在 sed 中更新什么以支持此操作,
我可以接受使用 awk 或 perl one liner 等的其他解决方案...
# date="[`date +%d"/"%b"/"%G"-"%T`]"
# echo $date
[21/Feb/2013-14:07:58]
# sed "s/^/$date /" file
sed: command garbled: s/^/[21/Feb/2013-14:07:58] /
例子
编辑前的文件
param1=3478374
param2=34128374
param3=34783743
编辑后的文件
[21/Feb/2013-14:07:58] param1=3478374
[21/Feb/2013-14:07:58] param2=34128374
[21/Feb/2013-14:07:58] param3=34783743
答案1
或者使用另一个分隔符如“|”,我在 Mac 上尝试过。
$ date="[`date +%d"/"%b"/"%G"-"%T`]"
$ echo $date
[21/Feb/2013-21:17:22]
$ cat /tmp/a
param1=3478374
param2=34128374
param3=34783743
$ sed "s|^|$date |g" /tmp/a
[21/Feb/2013-21:14:15] param1=3478374
[21/Feb/2013-21:14:15] param2=34128374
[21/Feb/2013-21:14:15] param3=34783743
答案2
该命令中的斜杠太多sed
。变量中的斜杠$date
需要转义。
这是我得到的结果(这是一个更有用的错误消息):
> echo foo | sed "s/^/[21/Feb/2013-14:07:58] /"
sed: -e expression #1, char 9: unknown option to `s'
> echo foo | sed "s/^/[21\/Feb\/2013-14:07:58] /"
[21/Feb/2013-14:07:58] foo
逃脱:
date="[`date +%d"\/"%b"\/"%G"-"%T`]"
如果单次转义不够,则可能需要对变量进行双重转义,因为在取消引用变量时可能会删除转义:
date="[`date +%d"\\/"%b"\\/"%G"-"%T`]"