La history
commande bash est très cool. Je comprends pourquoi il affiche les numéros de ligne, mais existe-t-il un moyen d'appeler la commande d'historique et de supprimer les numéros de ligne?
Le but ici est d'utiliser la commande d'historique, alors ne répondez pas cat ~/.bash_history
Sortie courant:
529 man history
530 ls
531 ll
532 clear
533 cd ~
534 history
Sortie désirée:
man history
ls
ll
clear
cd ~
history
Merci à tous pour vos excellentes solutions. Paul's est le plus simple et fonctionnera pour moi car la taille de mon historique de bash est fixée à 2000.
Je voulais aussi partager un article sympa que j'ai trouvé ce matin. Il a quelques bonnes options que j'utilise maintenant, comme garder les entrées en double hors de l'historique bash et m'assurer que plusieurs sessions bash n'écrasent pas le fichier historique: http://blog.macromates.com/2008/working-with -histoire-en-bash /
cat ~/.bash_history
est exclu?Réponses:
Essaye ça:
la source
history
commande au lieu de lire le fichier?man cut
. Il supprime les 7 premiers caractères de chaque ligne de sortie de lahistory
commande. Il ne devrait avoir de problèmes que si le nombre dépasse 99 999, ce que je n'ai jamais vu (et j'utilise beaucoup les shells ). Mais si cela vous inquiète:history | sed 's/^ *[0-9]* *//'
cut
syntaxe a plus de sens :) Merci @Keith Thompson pour votre solution qui fonctionnera pour> 100k d'histoires.awk
peut aider:Cette réponse peut échouer si vous avez une longue histoire.
la source
substr
c'est tellement plus simple, j'utilisehistory | awk '{for (i=2;i<=NF;i++) printf("%s ", $i);print("\r")}'
pour le mien !!Je suis tout à fait conscient que cette question est pour bash et beaucoup de gens préféreraient ne pas passer à zsh (cue downvotes ...)
Cependant, si vous étiez prêt à passer à zsh, zsh le prend en charge nativement (ainsi que d'autres options pour le formatage de l'historique)
(Voir /server/114988/removing-history-or-line-numbers-from-zsh-history-file )
la source
fc
c'est aussi unbash
builtin. La seule différence est que la première ligne est1
, donc ce seraitfc -ln 1
Je suis en retard sur celui-ci, mais la méthode la plus courte serait d'ajouter ce qui suit dans votre fichier
~/.bashrc
ou~/.profile
:HISTTIMEFORMAT="$(echo -e '\r\e[K')"
De bash
manpage
:En utilisant cette capacité, un smart hack consiste à faire de la variable "print" un retour chariot (
\r
) et d'effacer la ligne (code ANSIK
) au lieu d'un horodatage réel.la source
HISTTIMEFORMAT=$'\r\e[K'
HISTTIMEFORMAT=$'\r\e[K' history
Vous pouvez également utiliser sed:
En utilisant un alias, vous pouvez définir ceci comme votre standard (collez-le dans votre bash_profile):
la source
\+
dans une expression régulière de base n'est pas conforme à POSIX. À utiliser\{1,\}
si votresed
ne prend pas en charge l'\+
extension non standard .Bien que couper avec l'
-c
option fonctionne dans la plupart des cas pratiques, je pense que la connexion de l'historique à awk serait une meilleure solution. Par exemple:OU
Ces deux solutions font la même chose. La sortie de l'histoire est envoyée à awk. Awk efface ensuite la première colonne, qui correspond aux nombres dans la sortie de la commande d'historique. Ici awk est plus pratique car vous n'avez pas à vous soucier du nombre de caractères dans la partie numérique de la sortie.
print $0
équivaut àprint
, puisque la valeur par défaut est d'imprimer tout ce qui apparaît sur la ligne. La saisieprint $0
est plus explicite, mais celle que vous choisissez dépend de vous. Le comportement deprint $0
et simplementprint
lorsqu'il est utilisé avec awk est plus évident si vous utilisez awk pour imprimer un fichier (cecat
serait plus rapide à taper au lieu de awk, mais c'est pour illustrer un point).[Ex] Utilisation de awk pour afficher le contenu d'un fichier avec $ 0
[Ex] Utilisation de awk pour afficher le contenu d'un fichier sans $ 0 explicite
[Ex] Utilisation de awk lorsque la ligne d'historique s'étend sur plusieurs lignes
la source
De la sortie de
history --help
:Il écrit l'historique actuel dans le fichier spécifié -
/dev/stdout
dans ce cas.la source
history
La commande n'a pas d'option pour supprimer les numéros de ligne. Vous devrez combiner plusieurs commandes comme tout le monde le suggère:Exemple :
la source
sed
toute façon, la coupe initiale est redondante - ajoutez-la simplement à l'expression à la place.Vous voudrez peut-être essayer https://github.com/dvorka/hstr qui permet un filtrage "de style boîte de suggestion" de l'historique de Bash avec un classement (facultatif) basé sur les métriques, c'est-à-dire qu'il est beaucoup plus efficace et plus rapide dans les deux sens:
Il peut être facilement lié à Ctrl-ret / ouCtrl-s
la source
Vous pouvez utiliser la commande
cut
pour le résoudre:Découpez les champs de STDIN ou de fichiers.
Découpez les seize premiers caractères de chaque ligne de STDIN:
cut -c 1-16
Découpez les seize premiers caractères de chaque ligne des fichiers donnés:
cut -c 1-16 file
Découpez tout du 3ème caractère à la fin de chaque ligne:
cut -c3-
Découpez le cinquième champ de chaque ligne, en utilisant un deux-points comme délimiteur de champ (le délimiteur par défaut est tabulation):
cut -d':' -f5
Découpez les 2e et 10e champs de chaque ligne, en utilisant un point-virgule comme délimiteur:
cut -d';' -f2,10
Découpez les champs 3 à 7 de chaque ligne, en utilisant un espace comme délimiteur:
cut -d' ' -f3-7
la source
Je sais que je suis en retard pour la fête mais c'est tellement plus facile à retenir:
la source