Saya perlu menghapus semua perintah dalam riwayat saya yang cocok dengan string. Saya sudah mencoba:
$ history | grep searchstring | cut -d" " -f2 | history -d
-bash: history: -d: option requires an argument
$ history | grep searchstring | cut -d" " -f2 | xargs history -d
xargs: history: No such file or directory
$ temparg() { while read i; do "$@" "$i"; done }
$ history | grep searchstring | cut -d" " -f2 | temparg history -d
(no error, but nothing is deleted)
Apa cara yang tepat untuk melakukan ini?
bash
text-processing
command-history
xargs
perbaikan linux
sumber
sumber
history -d X
. Saya menemukan pertanyaan ini karena saya baru saja selesaihistory | grep search_str | sort -nr | awk '{print $1}' | while read i; do history -d $i; done
. Tidak ada kesalahan, tetapi tidak ada yang dihapus. Adakah yang bisa menjelaskan mengapa?Jawaban:
The
history
perintah hanya beroperasi pada file history Anda,$HISTFILE
(biasanya~/.history
atau~/.bash_history
). Ini akan jauh lebih mudah jika Anda hanya menghapus garis dari file itu, yang dapat dilakukan dengan banyak cara.grep
adalah salah satu cara, tetapi Anda harus berhati-hati untuk tidak menimpa file saat masih membacanya:Cara lain adalah dengan
sed
:sumber
$HISTFILE
dapat berisi spasi, mungkin layak dikutip.Jawaban Michael Mrozek akan bekerja jika Anda tidak peduli tentang menghapus perintah dari sesi saat ini. Jika Anda melakukannya, Anda harus menulis ke file riwayat sebelum melakukan operasi di posnya dengan melakukan
history -a
.Juga, setelah Anda menghapus entri yang Anda inginkan dari file riwayat Anda, Anda dapat memuatnya kembali dengan menerbitkan
history -c
, laluhistory -r
.sumber
Berdasarkan jawaban Michael dan Chris , saya datang dengan yang berikut. Tambahkan ke
~/.bashrc
file Anda dan kemudian memuatnya dengan. ~/.bashrc
atausource ~/.bashrc
.sumber
Bagi mereka yang mencari one-liner:
Jadi, jika Anda ingin misalnya. hapus beberapa baris dengan kata sandi di dalamnya, cukup ganti "SEARCH_STRING_GOES_HERE" dengan kata sandi. Ini akan mencari seluruh riwayat Anda untuk string pencarian itu dan menghapusnya.
2 hal yang harus diperhatikan
sumber
Ini berhasil untuk saya. history -c && history -a tidak memuat ulang file history dengan benar untuk saya. Jadi alih-alih saya hanya keluar dari sesi saya tepat setelah menulis ulang file histori sehingga yang ada di memori tidak menimpanya.
sumber