1

最近、bash 履歴のタイムスタンプをオンにしました。私は自分の履歴からさらに多くを得るために 3 つのオプションを使用しています。

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

私は、エポック時間を頭で解析することなく履歴を見たいと思うたびに HISTSIZE を途方もなく大きな数に設定するのではなく、bash スクリプトをまとめました。

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まったく何もしません。改行を認識させるにはどうすればよいですか?

どんなポインタでも大歓迎です。

4

2 に答える 2

0

環境によっては、引用符またはバックスラッシュを追加してエスケープする必要がある場合があります。

\\n   or "\n"
于 2013-10-05T02:26:22.023 に答える
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
于 2013-10-30T11:45:05.003 に答える