Regex 用awk脚本中的换行符替换带有时间戳的bash历史记录打印

Regex 用awk脚本中的换行符替换带有时间戳的bash历史记录打印,regex,bash,awk,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] "

我最近打开了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时,它什么也不做。我必须做什么才能让它识别新线


任何指针都将不胜感激。

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

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

您可以稍微修改脚本,使其不会输出\n:


就我个人而言,我不明白您想用\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