GNU/Linux >> Linux の 問題 >  >> Linux

.bash_historyの重複を削除するには、順序を保持しますか?

control + rの使用を本当に楽しんでいます コマンド履歴を再帰的に検索します。一緒に使用したいいくつかの良いオプションを見つけました:

# ignore duplicate commands, ignore commands starting with a space
export HISTCONTROL=erasedups:ignorespace

# keep the last 5000 entries
export HISTSIZE=5000

# append to the history instead of overwriting (good for multiple connections)
shopt -s histappend

私にとっての唯一の問題は、 erasedups 連続した重複のみを消去するため、この一連のコマンドを使用すると、次のようになります。

ls
cd ~
ls

ls コマンドは実際には2回記録されます。 cronを使用して定期的に実行することを考えました:

cat .bash_history | sort | uniq > temp.txt
mv temp.txt .bash_history

これにより、重複を削除できますが、残念ながら順序は保持されません。 sortしない場合 最初にファイルを信じないuniq 正しく動作することができます。

.bash_historyの重複を削除して、順序を維持するにはどうすればよいですか?

追加クレジット:

.bash_historyの上書きに問題はありますか スクリプトを介してファイルしますか?たとえば、Apacheログファイルを削除する場合は、 killを使用してnohup/resetシグナルを送信する必要があると思います。 ファイルへの接続をフラッシュします。 .bash_historyの場合 ファイル、おそらく私は psを使用することができます フィルタリングスクリプトを実行する前に、接続されたセッションがないことを確認しますか?

承認された回答:

履歴の並べ替え

このコマンドはsort| uniqのように機能します 、ただし、線を所定の位置に保持します

nl|sort -k 2|uniq -f 1|sort -n|cut -f 2

基本的に、各行にその番号を追加します。 sort | uniqの後 -ingすると、すべての行が元の順序に従って(行番号フィールドを使用して)並べ替えられ、行番号フィールドが行から削除されます。

このソリューションには、等しい行のクラスのどの代表が出力に含まれるかが定義されていないため、最終出力での位置が定義されていないという欠点があります。ただし、最新の担当者を選択する必要がある場合は、並べ替えできます 2番目のキーによる入力:

nl|sort -k2 -k 1,1nr|uniq -f1|sort -n|cut -f2

.bash_historyの管理

履歴の再読み込みと書き戻しには、 history -aを使用できます。 およびhistory-w それぞれ。

関連:ディレクトリに入るときにbashスクリプトを実行しますか?
Linux
  1. Unixでその場で履歴にアクセスする方法は?

  2. Utf-8ファイルからBOMを削除する方法は?

  3. Google Chrome から古い履歴を削除するにはどうすればよいですか?

  1. Linuxでhistoryコマンドを使用する方法

  2. コマンドラインを使用してLinuxでユーザーを削除する方法

  3. bcache からキャッシュ デバイスを削除するにはどうすればよいですか?

  1. 履歴から1行を削除する方法は?

  2. SSLキーからパスワードを削除する方法

  3. cPanel キャッシュ マネージャーを削除する方法