首先,一些背景:Perl的一個班輪時代轉換爲人類可讀然後取出劃時代
我們正在使用的代碼在我們的.bash_profile是追加時間戳的歷史命令。
export HISTTIMEFORMAT="%d/%m/%Y %T "
那麼我們也有一個附加我們的命令歷史記錄上的特定位置/根/歷史碼/
export HISTFILE=/root/history/.bash_hist-$(who -m | awk '{print $1}')
「出口HISTTIMEFORMAT」命令將時代時間戳附加到文件/根/歷史/。
現在,當我們使用Perl單線程將時代轉換爲人類可讀時,就會發生奇蹟。 (這,順便說一句,也就是在.bash_profile中)
format_history() {
perl -i -e '$/=undef;my $string=<>;$string=~s/#([0-9] {10}.*\n.*$)/"# ".localtime($1)."#\n#$1"/ge;print $string;' /root/history/.bash_hist-$(who -m | awk '{print $1}')
}
shopt -s histappend
PROMPT_COMMAND="history -a;format_history;$PROMPT_COMMAND"
最終的結果是包含這樣的線路爲每個命令文件:
# Wed Apr 27 10:11:26 2016
#1461769886
vi /root/.bash_profile
我正在尋找一種方式來有Perl刪除一旦它完成轉換,但目前爲止還沒有成功,這個時代的時間戳。我已經嘗試在行尾使用sed和另一個perl命令。就像這樣:
首先嚐試:
perl -i -e '$/=undef;my $string=<>;$string=~s/#([0-9]{10}.*\n.*$)/"# ".localtime($1)."#\n#$1"/ge;print $string;' /root/history/.bash_hist-$(who -m | awk '{print $1}' | sed '/^#1/ d'
第二個嘗試:
perl -i -e '$/=undef;my $string=<>;$string=~s/#([0-9]{10}.*\n.*$)/"# ".localtime($1)."#\n#$1"/ge;print $string;' /root/history/.bash_hist-$(who -m | awk '{print $1}' | perl -i -nle 'print if !/^#1\b' /root/history/.bash_hist-$(who -m | awk '{print $1}'
但正如我所說的這些不工作。任何人都可以幫我找到解決方案嗎?