我的答案基于先前的答案,但是增加了反向顺序,以便将历史项从最近删除到最近。
获取您的当前历史记录(调整您要查看的行数):
history | tail -n 10
这给了我类似的东西
1003 25-04-2016 17:54:52 echo "Command 1"
1004 25-04-2016 17:54:54 echo "Command 2"
1005 25-04-2016 17:54:57 echo "Command 3"
1006 25-04-2016 17:54:59 echo "Command 4"
1007 25-04-2016 17:55:01 echo "Command 5"
1008 25-04-2016 17:55:03 echo "Command 6"
1009 25-04-2016 17:55:07 echo "Command 7"
1010 25-04-2016 17:55:09 echo "Command 8"
1011 25-04-2016 17:55:11 echo "Command 9"
1012 25-04-2016 17:55:14 echo "Command 10"
选择要删除的项目的开始和结束位置。我将删除条目1006至1008。
for h in $(seq 1006 1008); do history -d 1006; done
这将产生 history -d
1006命令,然后1007变为1006并删除1006,然后1008(成为1007)现在为1006并被删除。
如果我还想删除history delete命令,那么它会有点复杂,因为您需要知道当前的最大历史记录条目。
您可以使用以下方法(可能有更好的方法):
history 1 | awk '{print $1}'
放在一起,您可以使用它来删除范围,还可以删除历史删除命令:
for h in $(seq 1006 1008); do history -d 1006; done; history -d $(history 1 | awk '{print $1}')
将所有内容包装在一个函数中,以添加到您的~/.bashrc
:
histdel(){
for h in $(seq $1 $2); do
history -d $1
done
history -d $(history 1 | awk '{print $1}')
}
删除命令4、5和6(1049-1051)并隐藏证据的示例:
[18:21:02 jonathag@gb-slo-svb-0221 ~]$ history 11
1046 25-04-2016 18:20:47 echo "Command 1"
1047 25-04-2016 18:20:48 echo "Command 2"
1048 25-04-2016 18:20:50 echo "Command 3"
1049 25-04-2016 18:20:51 echo "Command 4"
1050 25-04-2016 18:20:53 echo "Command 5"
1051 25-04-2016 18:20:54 echo "Command 6"
1052 25-04-2016 18:20:56 echo "Command 7"
1053 25-04-2016 18:20:57 echo "Command 8"
1054 25-04-2016 18:21:00 echo "Command 9"
1055 25-04-2016 18:21:02 echo "Command 10"
1056 25-04-2016 18:21:07 history 11
[18:21:07 jonathag@gb-slo-svb-0221 ~]$ histdel 1049 1051
[18:21:23 jonathag@gb-slo-svb-0221 ~]$ history 8
1046 25-04-2016 18:20:47 echo "Command 1"
1047 25-04-2016 18:20:48 echo "Command 2"
1048 25-04-2016 18:20:50 echo "Command 3"
1049 25-04-2016 18:20:56 echo "Command 7"
1050 25-04-2016 18:20:57 echo "Command 8"
1051 25-04-2016 18:21:00 echo "Command 9"
1052 25-04-2016 18:21:02 echo "Command 10"
1053 25-04-2016 18:21:07 history 11
问题是实际上要删除历史记录中的最后10条命令,因此,如果您想省些力气,可以使用另一个函数来调用histdel
为您执行计算的函数。
histdeln(){
# Get the current history number
n=$(history 1 | awk '{print $1}')
# Call histdel with the appropriate range
histdel $(( $n - $1 )) $(( $n - 1 ))
}
此函数采用1个参数,即要删除的先前历史记录项的数量。因此,要删除历史记录中的最后10个命令,只需使用histdeln 10
。
vi $HISTFILE
并删除您想要的。head -n -10
如果必须使其自动化,请使用。