Lihat berbagai riwayat pesta

30

The historyperintah daftar semua sejarah untuk sesi saat ini. Seperti:

1 ls 
2 cd /root
3 mkdir something
4 cd something
5 touch afile
6 ls
7 cd ..
8 rm something/afile
9 cd ..
10 ls
11 history

Untuk mencari item yang menarik, saya dapat mengirim historydengan grepsuka

history | grep ls
1 ls
6 ls
10 ls

Saya juga dapat melihat 3 perintah terakhir seperti:

history 3
11 history
12 history | grep ls
13 history 3

Tetapi bagaimana saya mendapatkan rentang sejarah tertentu? Misalnya sesuatu seperti:

history range 4 7
4 cd something
5 touch afile
6 ls
7 cd ..
Slartibartfast
sumber
Anda bisa daftar xperintah terakhir lalu pipa ke head.
Bratchley
@Bratchley: Untuk itu saya harus tahu berapa banyak perintah terakhir untuk pergi. Pertimbangkan ini, saya history | grep somethingmenunjukkan hasil perintah bernomor 123 234 345dalam sejarah dan saya mungkin tidak tahu jumlah perintah terakhir yang dieksekusi ( historydalam kasus ini). Perintah terakhir saya bisa berjumlah 400, 500 atau apa pun. Jadi pertama saya harus memeriksa nomor itu, mencari tahu perbedaannya, daftar xperintah terakhir dan kemudian pipa kehead
Slartibartfast

Jawaban:

52

Alih-alih history, Anda dapat menggunakan fc, yang memungkinkan Anda memilih rentang:

fc -l 4 7
cuonglm
sumber
4
Bahkan menerima angka negatif untuk dihitung dari akhir, seperti fc -l -16 -10.
Franklin Yu
hmm, bertanya-tanya mengapa kita membutuhkan perintah baru, bukan hanya argumen untuk perintah yang sebenarnya ...
Ringo
10

Jika Anda harus menggunakan perintah histori, kirimkan melalui sed atau awk:

history | sed -n '10,20p'

history | awk 'NR >= 10 && NR <= 20'

Kalau tidak, jawaban cuonglm adalah pilihan yang lebih baik.

G. Gabunia
sumber
6
Karena kita menjadi alternatif yang buruk, kombinasi headdan tailakan menyelesaikan masalah ini dengan cara yang bahkan kurang elegan. Untuk rentang 10-> 25 Anda harus menggunakan history | head 25 | tail 15.
Aaron
1

Menggunakan sejarah dengan grep pada nomor baris di sekitar perintah saya sedang mencari yang terbaik untuk saya.

Misalnya saya mencari apa yang saya lakukan sekitar ping mybox, kurang lebih 20 baris.

$ history | grep "ping mybox" 20325 ping mybox

Itu garis 20325jadi saya hanya perlu memahami garis yang dimulai dengan angka dalam [20320..20339]kisaran.

$ history | grep ^203[2-3][0-9]

Luc Yriarte
sumber
(1) Anda mengatakan "kurang lebih 20", tetapi contoh Anda menunjukkan −5 dan +14. (2) Ini tidak berhasil untuk saya, karena angka sejarah tampaknya memiliki ruang terdepan.
Scott