GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana Cara Menghapus Duplikat Di .bash_history, Mempertahankan Pesanan?

Saya sangat menikmati menggunakan control+r untuk mencari riwayat perintah saya secara rekursif. Saya telah menemukan beberapa opsi bagus yang ingin saya gunakan dengannya:

# 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

Satu-satunya masalah bagi saya adalah erasedups hanya menghapus duplikat berurutan – sehingga dengan string perintah ini:

ls
cd ~
ls

ls perintah sebenarnya akan direkam dua kali. Saya telah berpikir untuk menjalankan w/ cron secara berkala:

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

Ini akan mencapai penghapusan duplikat, tetapi sayangnya pesanan tidak akan dipertahankan. Jika saya tidak sort filenya dulu saya tidak percaya uniq dapat bekerja dengan baik.

Bagaimana cara menghapus duplikat di .bash_history saya, menjaga ketertiban?

Kredit Ekstra:

Apakah ada masalah dengan menimpa .bash_history file melalui skrip? Misalnya, jika Anda menghapus file log apache, saya pikir Anda perlu mengirim sinyal nohup / reset dengan kill untuk membuatnya flush koneksi ke file. Jika demikian halnya dengan .bash_history file, mungkin saya entah bagaimana bisa menggunakan ps untuk memeriksa dan memastikan tidak ada sesi yang terhubung sebelum skrip pemfilteran dijalankan?

Jawaban yang Diterima:

Mengurutkan riwayat

Perintah ini bekerja seperti sort|uniq , tetapi garis tetap di tempatnya

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

Pada dasarnya, awali setiap baris nomornya. Setelah sort|uniq -ing, semua baris diurutkan kembali sesuai dengan urutan aslinya (menggunakan bidang nomor baris) dan bidang nomor baris dihapus dari baris.

Solusi ini memiliki kelemahan bahwa tidak terdefinisi perwakilan kelas garis yang sama mana yang akan membuatnya dalam output dan oleh karena itu posisinya dalam output akhir tidak terdefinisi. Namun, jika perwakilan terbaru harus dipilih, Anda dapat sort masukan dengan kunci kedua:

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

Mengelola .bash_history

Untuk membaca ulang dan menulis kembali sejarah, Anda dapat menggunakan history -a dan history -w masing-masing.

Terkait:Jalankan skrip bash saat memasuki direktori?
Linux
  1. Bagaimana Cara Mengakses History On The Fly Di Unix?

  2. Bagaimana kernel Linux menentukan urutan panggilan __init?

  3. Bagaimana cara menghapus perangkat cache dari bcache?

  1. Cara menggunakan perintah history di Linux

  2. Cara Menghapus Pengguna di Linux Menggunakan Command Line

  3. cara menghapus tanda kutip ganda di csv

  1. Bagaimana Cara Menghapus Bom Dari File Utf-8?

  2. Bagaimana Cara Menghapus Satu Baris Dari Sejarah?

  3. Cara Menghapus Kata Sandi Dari Kunci SSL Anda