history
Perintah bash sangat keren. Saya mengerti mengapa ini menunjukkan nomor baris, tetapi apakah ada cara saya bisa memanggil perintah sejarah dan menekan nomor baris?
Intinya di sini adalah untuk menggunakan perintah sejarah, jadi tolong jangan balas cat ~/.bash_history
Output Saat Ini:
529 man history
530 ls
531 ll
532 clear
533 cd ~
534 history
Output yang Diinginkan:
man history
ls
ll
clear
cd ~
history
Terima kasih kepada semua orang untuk solusi hebat Anda. Paul's adalah yang paling sederhana dan akan bekerja untuk saya karena ukuran bash history saya diatur pada 2000.
Saya juga ingin membagikan artikel keren yang saya temukan pagi ini. Ini memiliki beberapa opsi bagus yang sekarang saya gunakan, seperti menjaga entri duplikat dari sejarah bash dan memastikan beberapa sesi bash tidak menimpa file riwayat: http://blog.macromates.com/2008/working-with -history-in-bash /
cat ~/.bash_history
dikesampingkan?Jawaban:
Coba ini:
sumber
history
perintah daripada membaca file?man cut
. Ini menghapus 7 karakter pertama dari setiap baris output darihistory
perintah. Seharusnya hanya memiliki masalah jika jumlahnya melebihi 99.999, sesuatu yang belum pernah saya lihat (dan saya menggunakan banyak kerang ). Tetapi jika Anda khawatir tentang hal itu:history | sed 's/^ *[0-9]* *//'
cut
sintaks lebih masuk akal :) Terima kasih @Keith Thompson untuk solusi Anda yang akan bekerja untuk> sejarah 100k.awk
bisa membantu:Jawaban ini bisa gagal jika Anda memiliki sejarah panjang.
sumber
substr
jauh lebih sederhana, saya telah menggunakanhistory | awk '{for (i=2;i<=NF;i++) printf("%s ", $i);print("\r")}'
milik saya !!Saya cukup sadar bahwa pertanyaan ini untuk bash dan banyak orang lebih suka untuk tidak beralih ke zsh (isyarat turun ...)
Namun, jika Anda bersedia untuk beralih ke zsh maka zsh mendukung ini secara asli (serta opsi lain untuk pemformatan riwayat)
(Lihat /server/114988/removing-history-or-line-numbers-from-zsh-history-file )
sumber
fc
adalahbash
builtin juga. Satu-satunya perbedaan adalah bahwa baris pertama adalah1
, jadi itu akanfc -ln 1
Saya telat dalam hal ini, tetapi metode yang lebih pendek adalah menambahkan berikut ini di file
~/.bashrc
atau Anda~/.profile
:HISTTIMEFORMAT="$(echo -e '\r\e[K')"
Dari bash
manpage
:Dengan menggunakan kemampuan ini, peretasan cerdas terdiri dari membuat variabel "mencetak" carriage return (
\r
) dan menghapus garis (kode ANSIK
) alih-alih cap waktu yang sebenarnya.sumber
HISTTIMEFORMAT=$'\r\e[K'
HISTTIMEFORMAT=$'\r\e[K' history
Atau, Anda bisa menggunakan sed:
Dengan menggunakan alias, Anda dapat menetapkan ini sebagai standar Anda (tempel di bash_profile Anda):
sumber
\+
dalam ekspresi reguler dasar tidak sesuai POSIX. Gunakan\{1,\}
jika Andased
tidak mendukung\+
ekstensi non-standar .Meskipun dipotong dengan
-c
opsi berfungsi untuk sebagian besar tujuan praktis, saya pikir bahwa sejarah perpipaan untuk awk akan menjadi solusi yang lebih baik. Sebagai contoh:ATAU
Kedua solusi ini melakukan hal yang sama. Keluaran sejarah diumpankan ke awk. Awk kemudian mengosongkan kolom pertama, yang sesuai dengan angka dalam output perintah sejarah. Di sini awk lebih nyaman karena Anda tidak perlu khawatir dengan jumlah karakter di bagian nomor output.
print $0
sama denganprint
, karena standarnya adalah untuk mencetak semua yang muncul di telepon. Mengetikprint $0
lebih eksplisit, tetapi yang Anda pilih terserah Anda. Perilakuprint $0
dan hanyaprint
ketika digunakan dengan awk lebih jelas jika Anda menggunakan awk untuk mencetak file (cat
akan lebih cepat untuk mengetik daripada awk, tetapi ini untuk menggambarkan suatu hal).[Ex] Menggunakan awk untuk menampilkan isi file dengan $ 0
[Ex] Menggunakan awk untuk menampilkan konten file tanpa $ 0 eksplisit
[Ex] Menggunakan awk ketika garis sejarah membentang beberapa baris
sumber
Dari output
history --help
:Itu menulis sejarah saat ini ke file yang ditentukan -
/dev/stdout
dalam hal ini.sumber
history
perintah tidak memiliki opsi untuk menekan nomor baris. Anda harus menggabungkan beberapa perintah karena semua orang menyarankan:Contoh:
sumber
sed
, maka potongan awal berlebihan - cukup tambahkan saja ke ekspresi.Anda mungkin ingin mencoba https://github.com/dvorka/hstr yang memungkinkan pemfilteran "sarankan gaya kotak" dari riwayat Bash dengan pemesanan berdasarkan metrik (opsional) yaitu jauh lebih efisien dan lebih cepat dalam arah maju dan mundur:
Itu dapat dengan mudah terikat Ctrl-rdan / atauCtrl-s
sumber
Anda dapat menggunakan perintah
cut
untuk menyelesaikannya:Potong bidang dari STDIN atau file.
Gunting enam belas karakter pertama dari setiap baris STDIN:
cut -c 1-16
Gunting enam belas karakter pertama dari setiap baris file yang diberikan:
cut -c 1-16 file
Gunting semuanya mulai dari karakter ke-3 hingga akhir setiap baris:
cut -c3-
Potong bidang kelima dari setiap baris, menggunakan titik dua sebagai pembatas bidang (pembatas default adalah tab):
cut -d':' -f5
Potong bidang ke-2 dan ke-10 dari setiap baris, menggunakan tanda titik koma sebagai pembatas:
cut -d';' -f2,10
Gunting bidang 3 hingga 7 dari setiap baris, menggunakan spasi sebagai pembatas:
cut -d' ' -f3-7
sumber
Saya tahu saya terlambat ke pesta tetapi ini jauh lebih mudah untuk diingat:
sumber