从 ZSH 历史文件中删除历史记录或行号

JP *_*shy 6 shell zsh

出于某种原因,我将这些奇数行号或某种历史记录号放入我的~/.zsh_history文件中,如下所示:

: 1266694881:0;rake db:migrate
Run Code Online (Sandbox Code Playgroud)

我宁愿不必求助于开始时的正则表达式,但我希望我的台词是这样的:

rake db:migrate
Run Code Online (Sandbox Code Playgroud)

有没有人对如何解决这个问题有任何建议?我找到了,setopt EXTENDED_HISTORY但似乎没什么用。

Den*_*son 13

尝试:

unsetopt EXTENDED_HISTORY
Run Code Online (Sandbox Code Playgroud)

这些数字是自命令开始的 Unix 纪元以来的秒数以及命令运行的持续时间(以秒为单位)。

编辑:

我忘了提到你应该使用fc命令来与历史交互而不是解析历史文件。至少有几个原因。一个是历史文件在您退出 shell、达到阈值或您使用fc -AI命令明确写入它之前没有内存中的条目(我相信)。其次,您可以保持EXTENDED_HISTORY打开状态并仍然与条目交互,而无需删除该信息。如果它关闭,那么当你这样做时fc -ld,shell 使用 shell 启动的时间作为历史记录中在该时间之前的命令的时间戳。如果关闭,它会记住实际日期和时间(您在文件中看到的数字)。

man zshbuiltins

列出最近的条目:

fc -l
Run Code Online (Sandbox Code Playgroud)

不带命令号列出它们:

fc -ln
Run Code Online (Sandbox Code Playgroud)

列出最近的 20 个没有命令号的命令:

fc -ln -20
Run Code Online (Sandbox Code Playgroud)

包括时间戳并仅打印最近的命令:

fc -lnd -1
Run Code Online (Sandbox Code Playgroud)

显示包含字符串“setop”(显示setoptunsetopt)的所有命令(在最后 50 个内):

fc -l -m '*setopt*' -50
Run Code Online (Sandbox Code Playgroud)