74 votes

Comment supprimer les résultats sélectionnés dans l'historique bash ?

history montre tous les résultats mais nous pouvons filtrer pour obtenir une commande particulière en utilisant la commande history | grep searchingCommand . C'est vraiment utile.

Mais le problème est qu'il affiche également les commandes qui ont été saisies avec une erreur de frappe ou qui n'ont pas abouti. L'identification de la commande correcte est alors très difficile. J'ai vérifié ce lien : Historique sélectif des commandes dans le terminal ? mais ce n'était pas ma solution.

Existe-t-il donc un moyen de supprimer de l'historique les commandes qui étaient incorrectes au moment de la saisie ou plus tard ?

160voto

Guillaume Berche Points 1701

Utilisez :

history -d OFFSET

pour supprimer l'entrée de l'historique à l'offset OFFSET avant même qu'il ne soit ajouté à votre fichier d'historique bash. Pour trouver le bon OFFSET vous n'avez qu'à exécuter history commande. C'est le numéro à partir du début de la ligne qui contient l'entrée de l'historique que vous voulez supprimer.

Et de sauvegarder les modifications dans l'historique d'utilisation :

history -w

Voir plus de détails dans ce guide .

24voto

blade19899 Points 25776

Modifier le fichier ~/.bash_history et supprimer la première fois avec des fautes de frappe

Par exemple, insérez cette commande :

gedit ~/.bash_history

Modifiez ce que vous voulez, puis enregistrez le fichier et redémarrez le terminal. La commande racine est :

sudo -i 
inser your password
gedit ~/.bash_history

si vous voulez supprimer tous les history -c devrait faire l'affaire


SYNTAX

history
history [n]
history -c
history -d offset
history [-anrw] [filename]
history -ps arg

KEY

-c Effacer la liste de l'historique. Ceci peut être combiné avec les autres options pour remplacer complètement la liste de l'historique.

-d offset Supprime l'entrée de l'historique à la position offset. Le décalage doit être spécifié tel qu'il apparaît lorsque l'historique est affiché.

-a Ajouter les nouvelles lignes d'historique (lignes d'historique saisies depuis depuis le début de la session Bash en cours) au fichier d'historique.

-n Ajouter les lignes de l'historique qui ne sont pas déjà lues depuis le fichier d'historique fichier à la liste d'historique courante. Ce sont les lignes ajoutées au fichier d'historique depuis le début de la session Bash en cours.

-r Lire le fichier d'historique courant et ajouter son contenu au fichier liste d'historique.

-w Ecriture de l'historique actuel dans le fichier d'historique.

-p Effectuer une substitution d'historique sur les args et afficher les résultat sur la sortie standard, sans stocker les résultats dans la liste de l'historique.

-s Les arguments sont ajoutés à la fin de la liste de l'historique comme une seule unique.

source :

22voto

Restuta Points 4476

J'aimerais ajouter une autre méthode pour modifier (ou supprimer) les entrées de l'historique, que j'ai trouvée plutôt accidentellement lorsque je travaillais avec le bash :

Pour le démontrer, commencez par exécuter les trois commandes suivantes dans bash :

$ echo 1
1
$ echo 2
2
$ echo 3
3

Vous pouvez maintenant sélectionner à nouveau ces commandes en utilisant les touches fléchées ou Ctrl + p y Ctrl + n .

Disons que vous voulez modifier les deux premières commandes. Déplacez-vous dans l'historique jusqu'à echo 1 apparaît et changez-le en echo 1 - changed mais n'appuyez pas sur la touche Entrée. Si vous vous déplacez maintenant dans votre historique, cette ligne reste dans son état modifié et vous pouvez vous en éloigner et y revenir. Passez maintenant à la ligne echo 2 et le changer en echo 2 - changed Encore une fois, n'appuyez pas sur la touche Entrée. Afin de sauvegarder les modifications apportées à ces lignes, sélectionnez n'importe quelle commande dans l'historique, à l'exception de ces deux-là, et appuyez sur Ctrl + c .

Bien sûr, au lieu de modifier l'entrée de l'historique, vous pouvez aussi la supprimer, ce qui aura pour effet de laisser une ligne vide à cette entrée. Pour supprimer la ligne actuellement affichée à l'invite, tapez Ctrl + e (qui saute à la fin de la ligne) suivi de Ctrl + u (qui supprime le texte du début de la ligne jusqu'au curseur).

Voir aussi https://unix.stackexchange.com/questions/195668/what-can-cause-an-item-to-be-deleted-from-my-bash-history/195726#195726 pour une explication plus détaillée du contexte technique.

Le moyen le plus simple :

  1. ctrl + r pour rechercher la commande que vous voulez supprimer/modifier.
  2. end pour sélectionner la commande recherchée à supprimer/modifier
  3. Supprimer ou modifier la commande sélectionnée (ne pas appuyer sur enter o ctrl + c )
  4. flèche vers le haut (ou ctrl + p ) ou flèche vers le bas (ou ctrl + n ) pour sélectionner toute autre commande.
  5. ctrl + c C'est ça !

Note :

Cela ne modifie que les commandes de la session en cours. Si nous voulons modifier des commandes plus anciennes et enregistrer les changements, nous devons exécuter la commande suivante avant de fermer le terminal :

history -w

16voto

Stormvirux Points 4366

Si vous voulez le supprimer immédiatement à partir du même terminal, vous devez d'abord ajouter ce qui suit à votre fichier ~/.bashrc.

PROMPT_COMMAND='history -a' 

et redémarrer votre terminal.

Vous pouvez l'ajouter n'importe où dans le fichier .bashrc. Je l'ai ajouté comme ci-dessous avec d'autres choses liées à l'histoire.

enter image description here

Habituellement, au cours d'une session bash, les commandes exécutées ne sont pas écrites dans le fichier .bash_history avant la fin de la session. PROMPT_COMMAND='history -a' entre la commande à cet instant précis dans .bash_history.

Maintenant, chaque fois que vous faites une erreur ou une faute dans une commande et que vous voulez la supprimer, il suffit d'exécuter ce qui suit

sed -i '$d' ~/.bash_history

et tada il serait supprimé.

Pour simplifier, vous pouvez l'aliaser en quelque chose de plus simple et l'utiliser comme suit

alias rh ='sed -i '\''$d'\'' ~/.bash_history'

Donc l'exécution rh supprimera la dernière commande exécutée de l'historique.

Ce qui précède est un aliasing temporaire qui ne dure que le temps d'une session.

alias rh = 'sed -i '\''$d'\'' ~/.bash_history' 

dans le fichier .bashrc

NOTE

Il ne doit pas y avoir d'espace de part et d'autre des =

Si vous ne voulez pas d'alias, vous pouvez aussi faire ce qui suit

Faire un nom de commade rh et le placer dans /bin répertoire :

  • Ouvrez un fichier en disant rh et collez le code suivant, enregistrez et fermez :

    sed -i '$d' ~/.bash_history

  • Faire rh et le placer dans /bin répertoire :

     chmod +x rh
     sudo cp rh /bin 
  • Maintenant, utilisez rh pour supprimer une commande récente de l'historique.

3voto

e7zkw9120 Points 173

Pour supprimer plusieurs lignes (par exemple de 1974 à 1990, vérifier avec history commande) :

  for i in `seq 1974 1990` ; do history -d 1974 ; done

Notez que le numéro de la ligne à supprimer est toujours le même, car vous supprimez constamment cette ligne et passez à la suivante.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X