2013-10-05 65 views
1

我最近打開了我的bash歷史記錄中的時間戳記。我正在使用三個選項來讓我的歷史更多。在awk腳本中替換換行符,用於打印歷史打印(帶時間戳)

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時,它什麼都不做。我必須做什麼才能讓它識別換行符?

任何指針將不勝感激。

+1

我一不明白你想用'\ N'做什麼。向我們展示一些示例輸入和預期輸出。 –

回答

0

根據您的環境,您可能需要使用引號或其他反斜槓進行轉義。

\\n or "\n" 
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