Polecenie bash history
jest bardzo fajne. Rozumiem, dlaczego pokazuje numery linii, ale czy istnieje sposób, aby wywołać polecenie historii i ukryć numery linii?
Chodzi o to, aby użyć polecenia historii, więc nie odpowiadaj cat ~/.bash_history
Prąd wyjściowy:
529 man history
530 ls
531 ll
532 clear
533 cd ~
534 history
Pożądane wyjście:
man history
ls
ll
clear
cd ~
history
Dziękuję wszystkim za świetne rozwiązania. Paul jest najprostszy i będzie dla mnie odpowiedni, ponieważ mój rozmiar historii bash jest ustawiony na 2000.
Chciałem też podzielić się fajnym artykułem, który znalazłem dziś rano. Ma kilka dobrych opcji, których teraz używam, takich jak utrzymywanie zduplikowanych wpisów z historii basha i upewnianie się, że wiele sesji basha nie nadpisuje pliku historii: http://blog.macromates.com/2008/working-with -history-in-bash /
cat ~/.bash_history
jest to wykluczone?Odpowiedzi:
Spróbuj tego:
źródło
history
polecenia zamiast czytać plik?man cut
. Usuwa pierwsze 7 znaków z każdego wiersza wyjściahistory
polecenia. Powinien mieć problemy tylko wtedy, gdy liczba przekroczy 99 999, coś, czego nigdy nie widziałem (i często używam pocisków ). Ale jeśli się tym martwisz:history | sed 's/^ *[0-9]* *//'
cut
składnia ma więcej sensu :) Dzięki @Keith Thompson za rozwiązanie, które będzie działać dla> 100k historii.awk
może pomóc:Ta odpowiedź może zawieść, jeśli masz długą historię.
źródło
substr
jest o wiele prostsze, używałemhistory | awk '{for (i=2;i<=NF;i++) printf("%s ", $i);print("\r")}'
dla siebie !!Jestem całkiem świadomy, że to pytanie jest dla basha i wiele osób wolałoby nie przełączać się na zsh (cue downvotes ...)
Jeśli jednak chcesz przełączyć się na zsh, zsh obsługuje to natywnie (a także inne opcje formatowania historii)
(Zobacz /server/114988/removing-history-or-line-numbers-from-zsh-history-file )
źródło
fc
to też jestbash
wbudowany. Jedyną różnicą jest to, że pierwsza linia jest1
takafc -ln 1
Spóźniłem się z tym, ale krótszą metodą byłoby dodanie następujących elementów w pliku
~/.bashrc
lub~/.profile
:HISTTIMEFORMAT="$(echo -e '\r\e[K')"
Od basha
manpage
:Korzystając z tej możliwości, sprytny hack polega na tym, że zmienna „drukuje” jako znak powrotu karetki (
\r
) i czyści linię (kod ANSIK
) zamiast rzeczywistego znacznika czasu.źródło
HISTTIMEFORMAT=$'\r\e[K'
HISTTIMEFORMAT=$'\r\e[K' history
Alternatywnie możesz użyć sed:
Używając aliasu, możesz ustawić to jako standard (umieść go w swoim bash_profile):
źródło
\+
w podstawowym wyrażeniu regularnym nie jest zgodne z POSIX. Użyj,\{1,\}
jeślised
nie obsługuje niestandardowego\+
rozszerzenia.Chociaż cięcie z tą
-c
opcją działa w większości praktycznych celów, myślę, że lepsze rozwiązanie byłoby przesłanie historii rurociągów do awk. Na przykład:LUB
Oba te rozwiązania robią to samo. Dane wyjściowe historii są przekazywane do awk. Awk następnie usuwa pierwszą kolumnę, która odpowiada liczbom w danych wyjściowych polecenia historii. Tutaj awk jest wygodniejszy, ponieważ nie musisz przejmować się liczbą znaków w części liczbowej wyniku.
print $0
jest odpowiednikiemprint
, ponieważ domyślnie wypisuje wszystko, co pojawia się w wierszu. Pisanieprint $0
jest bardziej wyraźne, ale wybór należy do Ciebie. Zachowanieprint $0
i po prostuprint
użycie z awk jest bardziej oczywiste, jeśli użyliśmy awk do wydrukowania pliku (cat
szybsze byłoby wpisanie zamiast awk, ale służy to zilustrowaniu punktu).[Np.] Użycie awk do wyświetlenia zawartości pliku z $ 0
[Np.] Używanie awk do wyświetlania zawartości pliku bez jawnego $ 0
[Np.] Używanie awk, gdy wiersz historii obejmuje wiele linii
źródło
Z wyników
history --help
:Zapisuje aktualną historię do określonego pliku -
/dev/stdout
w tym przypadku.źródło
history
polecenie nie ma opcji pomijania numerów linii. Będziesz musiał połączyć wiele poleceń, jak wszyscy sugerują:Przykład:
źródło
sed
mimo wszystko zamierzasz to przeprowadzić , początkowe cięcie jest zbędne - po prostu dodaj je do wyrażenia.Możesz wypróbować https://github.com/dvorka/hstr, który pozwala na filtrowanie historii Bash „w stylu pola sugestii” z (opcjonalnym) porządkowaniem opartym na metrykach, tj. Jest znacznie wydajniejsze i szybsze zarówno w kierunku do przodu, jak i do tyłu:
Można go łatwo powiązać z Ctrl-ri / lubCtrl-s
źródło
Możesz użyć polecenia,
cut
aby go rozwiązać:Wytnij pola z STDIN lub plików.
Wytnij pierwsze szesnaście znaków z każdego wiersza STDIN:
cut -c 1-16
Wytnij pierwsze szesnaście znaków z każdego wiersza podanych plików:
cut -c 1-16 file
Wytnij wszystko od trzeciego znaku do końca każdego wiersza:
cut -c3-
Wytnij piąte pole każdego wiersza, używając dwukropka jako separatora pól (domyślnym separatorem jest tabulator):
cut -d':' -f5
Wytnij drugie i dziesiąte pole każdego wiersza, używając średnika jako separatora:
cut -d';' -f2,10
Wytnij pola od 3 do 7 w każdym wierszu, używając spacji jako separatora:
cut -d' ' -f3-7
źródło
Wiem, że spóźniłem się na imprezę, ale o wiele łatwiej to zapamiętać:
źródło