用awk脚本替换换行符,用于打印具有时间戳的bash历史记录

时间:2013-10-05 01:13:05

标签: regex bash awk

我最近在bash历史记录中打开了时间戳。我正在使用三个选项来更好地了解我的历史。

HISTTIMEFORMAT="[%F %T %Z] "; shopt -s histappend; PROMPT_COMMAND='history -a'

我拼凑了一个bash脚本,而不是每当我想查看历史而不必大脑解析时代时,就将HISTSIZE设置为一个非常大的数字。

awk '/^#[0-9]+$/{ match($0,/[0-9]+/); 
    t = strftime("[%F %T %Z] ",substr($0,RSTART,RLENGTH)); 
    sub(/#[0-9]+/,t) } 1' ~/.bash_history | less

这很难看,但它确实有效。我想它也可以简化,但这仅仅是我发布这个的原因。我想要做的是在每个命令前加上对应的时间戳。我认为这可以在sub(/#[0-9]+/,t)中完成,但是当我尝试匹配\n时,它什么都不做。我该怎么做让它识别新线?

任何指针都将非常感激。

2 个答案:

答案 0 :(得分:0)

根据您的环境,您可能需要使用引号或额外的反斜杠进行转义。

\\n   or "\n"

答案 1 :(得分:0)

记录分隔符\n不是记录$0的一部分。

您可以稍微修改您的脚本,以便它不会输出\n

awk '/^#[0-9]+$/{ match($0,/[0-9]+/);
    t = strftime("[%F %T %Z] ",substr($0,RSTART,RLENGTH));
    sub(/#[0-9]+/,t); printf $0; next } 1' ~/.bash_history | less