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

57

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

Mais le problème est qu’il affiche les commandes qui ont été entrées avec une erreur de frappe ou qui ont échoué. Ensuite, identifier le bon est vraiment pénible. J'ai vérifié ce lien: Historique des commandes sélectives dans le terminal? , mais c'était pas ma solution.

Existe-t-il un moyen de supprimer ces commandes de l’historique incorrect au moment de la saisie ou ultérieurement?

    
posée Saurav Kumar 12.09.2013 - 11:28
la source

6 réponses

10

J'aimerais ajouter une autre méthode de modification (ou de suppression) des entrées de l'historique, que j'ai trouvée assez accidentellement lorsque je travaillais avec bash:

Pour illustrer cela, 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 de direction ou Ctrl + p et Ctrl + n .

Supposons que vous souhaitiez modifier les deux premières commandes. Parcourez l'historique jusqu'à ce que echo 1 apparaisse et remplacez-le par echo 1 - changed , mais n'appuyez pas sur Entrée. Si vous avancez 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 remplacez-la par echo 2 - changed . Là encore, n'appuyez pas sur la touche Entrée. Pour enregistrer les modifications apportées à ces lignes, sélectionnez une commande de l'historique à l'exception de ces deux-là et appuyez sur Ctrl + c .

Bien sûr, au lieu de modifier l’entrée d’historique, vous pouvez également la supprimer, ce qui donnera une ligne vide à cette entrée. Pour supprimer la ligne actuellement affichée à l'invite, appuyez sur Ctrl + e (qui passe à la fin de la ligne) suivi de Ctrl + < kbd> u (qui supprime le texte du début de la ligne au curseur).

Voir aussi link pour une explication plus détaillée du contexte technique.

Le moyen le plus simple:

  1. ctrl + r pour rechercher la commande à supprimer / modifier.
  2. end pour sélectionner la commande de suppression / modification recherchée
  3. Supprimez ou modifiez la commande sélectionnée (n'appuyez pas sur enter ou ctrl + c )
  4. flèche vers le haut (ou ctrl + p ) ou flèche vers le bas (ou ctrl + n ) pour sélectionner une autre commande.
  5. ctrl + c C'est tout!

Remarque :

Ceci ne change que les commandes de la session en cours. Si nous voulons modifier les anciennes commandes et enregistrer les modifications, nous devons exécuter la commande suivante avant de fermer le terminal:

history -w
    
réponse donnée Stefan Hamcke 31.01.2018 - 17:15
la source
134

Utiliser:

history -d OFFSET

pour supprimer l'entrée d'historique au décalage OFFSET avant même qu'elle ait été ajoutée à votre fichier d'historique bash. Pour connaître le bon OFFSET , il vous suffit d'exécuter la commande history . C’est le numéro à partir du début de la ligne qui contient l’entrée de l’historique que vous souhaitez supprimer.

Et pour enregistrer les modifications apportées à l'historique, utilisez:

history -w

Voir plus de détails dans ce guide .

    
réponse donnée user299481 27.02.2014 - 11:14
la source
19

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

Par exemple, insérez cette commande:

gedit ~/.bash_history

Éditez quelque chose que vous aimez et après que sauvegardez le fichier et redémarrez le terminal. La commande racine est:

sudo -i 
inser your password
gedit ~/.bash_history

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

SYNTAX

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

KEY

-c Clear the history list. This may be combined with the other options to replace the history list completely.

-d offset Delete the history entry at position offset. offset should be specified as it appears when the history is displayed.

-a Append the new history lines (history lines entered since the beginning of the current Bash session) to the history file.

-n Append the history lines not already read from the history file to the current history list. These are lines appended to the history file since the beginning of the current Bash session.

-r Read the current history file and append its contents to the history list.

-w Write out the current history to the history file.

-p Perform history substitution on the args and display the result on the standard output, without storing the results in the history list.

-s The args are added to the end of the history list as a single entry.

source :

réponse donnée blade19899 12.09.2013 - 11:32
la source
15

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

PROMPT_COMMAND='history -a' 

et redémarrez votre terminal.

Vous pouvez l'ajouter n'importe où dans le fichier .bashrc .J'ai ajouté comme ci-dessous, ainsi que d'autres éléments liés à l'historique.

Habituellement, pendant une session bash, les commandes exécutées ne sont pas écrites dans .bash_history tant que la session n'est pas terminée. PROMPT_COMMAND='history -a' entre alors la commande et ensuite dans .bash_history.

Maintenant, chaque fois que vous faites une erreur ou une erreur dans une commande et que vous voulez le supprimer, exécutez la suivante:

sed -i '$d' ~/.bash_history

et tada, il serait supprimé.

Pour simplifier les choses, vous pouvez créer un alias plus simple et l’utiliser comme

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

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

Ce qui précède est un alias temporaire qui ne dure qu'une session. Pour le rendre permanent ou persistant, ajoutez

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

vers .bashrc

REMARQUE

Il ne doit y avoir aucun espace des deux côtés de =

Si vous ne voulez pas créer d'alias, vous pouvez également procéder comme suit

Créez un nom de commande rh et placez-le dans le répertoire /bin :

  • Ouvrez un fichier avec rh et collez le code suivant, enregistrez et fermez-le:

    sed -i '$d' ~/.bash_history

  • Créez l'exécutable rh et placez-le dans le répertoire /bin :

     chmod +x rh
     sudo cp rh /bin 
  • Utilisez maintenant la commande rh pour supprimer la commande récente de l'historique.

réponse donnée Stormvirux 12.09.2013 - 12:54
la source
1

pour supprimer plusieurs lignes (par exemple, de 1974 à 1990, vérifiez avec la commande history ):

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

Notez que le numéro de ligne à supprimer est toujours le même, car vous supprimez celui-ci constamment et passez au suivant.

    
réponse donnée 27.09.2018 - 11:16
la source
1

Si vous utilisez l'option "set -o vi" dans bash (très utile pour rechercher en arrière avec la touche Echap), alors vous pouvez rechercher la ligne et supprimer la ligne avec "dd" comme vous le feriez dans " vi ".

    
réponse donnée The IT Guy 29.10.2017 - 00:05
la source

Lire d'autres questions sur les étiquettes