Cách lấy phạm vi lịch sử shell Bash


9

Làm cách nào tôi có thể nhận / lọc các mục lịch sử trong một phạm vi cụ thể?

Tôi có một tệp lịch sử lớn và thường xuyên sử dụng

history | grep somecommand

Bây giờ, trí nhớ của tôi khá tệ và tôi cũng muốn xem những gì tôi đã làm trong khoảng thời gian tôi nhập lệnh.

Bây giờ tôi làm điều này: nhận được trận đấu, nói 4992 somecommand, sau đó tôi làm

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

Điều này thường đủ tốt, nhưng tôi muốn thực hiện nó chính xác hơn, đó là xem các lệnh từ 4972 đến 5012, đó là 20 lệnh trước và 20 sau.

Tôi đang tự hỏi nếu có một cách dễ dàng hơn? Tôi nghi ngờ, một kịch bản tùy chỉnh là theo thứ tự, nhưng có lẽ ai đó đã làm điều gì đó tương tự trước đây.


Đối với thao tác lịch sử, có 2 phần dựng sẵn: gnu.huihoo.org/bash-2.02/html_node/bashref_73.html
LAFK cho biết Phục hồi lại

Câu trả lời:


13

Bạn có thể yêu grepcầu in một số dòng xung quanh trận đấu, ví dụ: 3 trước và 5 sau:

history | grep -B 3 -A 5 somecommand

grep -C 4tương đương với grep -A 4 -B 4.

Nhưng thường thì bạn sẽ không biết chính xác có bao nhiêu dòng bạn muốn trước. Vì vậy, sử dụng ít hơn và tìm kiếm bên trong nó. Bạn thậm chí có thể khởi chạy tìm kiếm từ dòng lệnh:

history | less +/somecommand

1
lừa rất mát với less! Không biết bạn có thể làm điều đó
warren

Thực sự rất tuyệt ... Tôi có thể thấy "xung quanh" lệnh tôi đang tìm, ngay cả khi tôi không thực sự tìm kiếm nó một cách cụ thể nhưng tôi nhớ sử dụng nó khi tôi sử dụng một lệnh khác có liên quan! Tốt thứ tnx.
Khalil Gharbaoui

8

Hãy thử fc:

fc -l 4972 5012

... đó là một lệnh bash dựng sẵn. (vì vậy đừng thử nó trong tcsh:>)


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.