Rad*_*anu 14 command-line bash history
如何在终端中列出最常用的命令?
我知道这个问题对于我们中的一些人未来的任何建议可能没有用,但即使这样,当我们不记得过去使用过一次或几次的命令时,该列表可能很有用,当我们可以在此列表的结尾。
Rad*_*anu 20
我们将使用.bash_history文件中的记录来执行此操作。下一个命令将为您提供所有命令的列表,以便您最常使用它们:
history | awk 'BEGIN {FS="[ \t]+|\\|"} {print $3}' | sort | uniq -c | sort -nr
Run Code Online (Sandbox Code Playgroud)
如果您只想要前 10 名,则必须head在上面的命令中添加:
history | awk 'BEGIN {FS="[ \t]+|\\|"} {print $3}' | sort | uniq -c | sort -nr | head
Run Code Online (Sandbox Code Playgroud)
要获得特定的顶部,例如前 5,请使用headwith-n 5选项:

如果您希望以相反的顺序列出列表(顶部带有很少使用的命令),请不要将roprion 用于 second sort:
history | awk 'BEGIN {FS="[ \t]+|\\|"} {print $3}' | sort | uniq -c | sort -n
Run Code Online (Sandbox Code Playgroud)
最后,例如,要获取包含使用过的命令的列表,请使用grep ' 1 '(更改1为所需的数字):
history | awk 'BEGIN {FS="[ \t]+|\\|"} {print $3}' | sort | uniq -c | grep ' 1 '
Run Code Online (Sandbox Code Playgroud)
要处理sudo命令(如sudo vim foo),而不仅仅是{print $3}在 awk 命令中,请使用:
{if($3 ~ /sudo/) print $4; else print $3}
Run Code Online (Sandbox Code Playgroud)
所以整个命令看起来像:
history | awk 'BEGIN {FS="[ \t]+|\\|"} {if($3 ~ /sudo/) print $4; else print $3}' | sort | uniq -c | sort -nr
Run Code Online (Sandbox Code Playgroud)
例如:
$ history | awk 'BEGIN {FS="[ \t]+|\\|"} {print $3}' | sort | uniq -c | sort -nr | head
284 vim
260 git
187 find
174 man
168 echo
149 rm
134 awk
115 pac
110 sudo
102 l
$ history | awk 'BEGIN {FS="[ \t]+|\\|"} {if($3 ~ /sudo/) print $4; else print $3}' | sort | uniq -c | sort -nr | head
298 vim
260 git
189 find
174 man
168 echo
153 rm
134 awk
115 pac
102 l
95 cd
Run Code Online (Sandbox Code Playgroud)
可以看到跳计数vim,rm等等。