Cara mendapatkan rentang riwayat Bash shell

9

Bagaimana saya bisa mendapatkan / memfilter entri riwayat dalam rentang tertentu?

Saya memiliki file riwayat yang besar dan sering digunakan

history | grep somecommand

Sekarang, ingatan saya sangat buruk dan saya juga ingin melihat apa lagi yang saya lakukan sekitar waktu saya memasukkan perintah.

Untuk saat ini saya melakukan ini: dapatkan kecocokan, katakanlah 4992 somecommand, maka saya lakukan

history | grep 49[0-9][0-9]

ini biasanya cukup baik, tetapi saya lebih suka melakukannya lebih tepatnya, yaitu melihat perintah dari 4972 hingga 5012, yaitu 20 perintah sebelum dan 20 sesudahnya.

Saya bertanya-tanya apakah ada cara yang lebih mudah? Saya menduga, skrip khusus sudah beres, tetapi mungkin orang lain telah melakukan hal serupa sebelumnya.

Aniti
sumber
Untuk manipulasi sejarah ada 2 built-in: gnu.huihoo.org/bash-2.02/html_node/bashref_73.html
LAFK mengatakan Reinstate Monica

Jawaban:

13

Anda dapat meminta grepuntuk mencetak beberapa baris di sekitar pertandingan, misalnya 3 sebelum dan 5 setelah:

history | grep -B 3 -A 5 somecommand

grep -C 4setara dengan grep -A 4 -B 4.

Tetapi seringkali Anda tidak akan tahu persis berapa banyak garis yang Anda inginkan sebelumnya. Jadi, gunakan lebih sedikit dan cari di dalamnya. Anda bahkan dapat meluncurkan pencarian dari baris perintah:

history | less +/somecommand
Gilles 'SANGAT berhenti menjadi jahat'
sumber
1
trik yang sangat keren less! Tidak tahu Anda bisa melakukan itu
warren
Sangat bagus memang ... Saya bisa melihat "sekitar" perintah yang saya cari, bahkan ketika saya tidak benar-benar mencarinya secara khusus tetapi saya ingat menggunakannya ketika saya menggunakan perintah lain yang relevan! Barang bagus tnx.
Khalil Gharbaoui
8

Coba fc:

fc -l 4972 5012

... itu adalah perintah bash builtin. (jadi jangan mencobanya di tcsh:>)

Rondo
sumber
4

mencoba history | grep -C20 '^4992'

Coder Kasual
sumber