历史列表没有时间戳并且结果独特

使用bash,我用时间戳保存我的历史记录。

如何打印省略时间戳的历史记录?

alias h=history alias g=grep -i 

要查找我用于heroku的行,我输入:

 > h | g heroku 

我想自然地在没有时间戳的情况下使结果独一无二。

这个问题有些相关: 如何避免.bash_history中的重复条目

但是,有时我想查看历史记录中的副本以查看运行命令的上下文。

简单地说, history | sed 's/.[ ]*.[0-9]*.[ ]*//' | uniq | grep -i "heroku" history | sed 's/.[ ]*.[0-9]*.[ ]*//' | uniq | grep -i "heroku"

sed将删除每行开头的任何[spaces] [数字] [空格]

为了优化而做到了

history | grep -i "heroku" | sed 's/.[ ]*.[0-9]*.[ ]*//' | uniq

除了回答@ devav2

清除/取消历史时间戳环境变量

HISTTIMEFORMAT="";

导出以下命令,

export HISTCONTROL=ignoredups – >这将忽略按顺序执行的重复项

可以基于每个命令抑制(或修改)时间戳:

如果HISTTIMEFORMAT变量已设置且不为null,则其值将用作strftime(3)的格式字符串,以打印与每个显示的历史记录条目关联的时间戳。 否则不打印时间戳。

只留下行号,这些行号无法抑制,但填充到固定宽度 (行号<100,000):

 printf("%5d%c %s%s\n", line_number, modified ? '*' : ' ', timestamp, line); 

因此,要从每一行中删除前缀,我们需要剪切前7个字符(5个数字,1个标记字符和1个空格),例如:

 $ HISTTIMEFORMAT= history 10 | cut -c8- 

这可以很容易地添加到别名:

 $ alias h='HISTTIMEFORMAT= history | cut -c8-' 

然后用例如:

 $ h | grep whatever $ h | head -n 10