首先,这不是 SE 上任何现有线程的重复。我已经阅读了关于更好的 bash 历史的这两个线程(第 1 个,第 2 个),但没有一个答案有效 - 顺便说一下,我在 Fedora 15 上。
我.bashrc
在用户目录(/home/aahan/)中的文件中添加了以下内容,它不起作用。有人有线索吗?
HISTCONTROL=ignoredups:erasedups # no duplicate entries
HISTSIZE=1000 # custom history size
HISTFILESIZE=100000 # custom history file size
shopt -s histappend # append to history, don't overwrite it
PROMPT_COMMAND="history -a; history -c; history -r; $PROMPT_COMMAND" # Save and reload the history after each command finishes
Run Code Online (Sandbox Code Playgroud)
好的,这就是我想要的 bash 历史记录(优先级):
$ cat data.txt
aaaaaa
aaaaaa
cccccc
aaaaaa
aaaaaa
bbbbbb
$ cat data.txt | uniq
aaaaaa
cccccc
aaaaaa
bbbbbb
$ cat data.txt | sort | uniq
aaaaaa
bbbbbb
cccccc
$
Run Code Online (Sandbox Code Playgroud)
我需要的结果是显示原始文件中的所有行,删除所有重复项(不仅仅是连续的),同时保持文件中语句的原始顺序。
在这里,在这个例子中,我实际上正在寻找的结果是
aaaaaa
cccccc
bbbbbb
Run Code Online (Sandbox Code Playgroud)
我uniq
一般如何执行此通用操作?
我需要删除历史记录中匹配字符串的所有命令。我试过了:
$ history | grep searchstring | cut -d" " -f2 | history -d
-bash: history: -d: option requires an argument
$ history | grep searchstring | cut -d" " -f2 | xargs history -d
xargs: history: No such file or directory
$ temparg() { while read i; do "$@" "$i"; done }
$ history | grep searchstring | cut -d" " -f2 | temparg history -d
(no error, but nothing is deleted)
Run Code Online (Sandbox Code Playgroud)
这样做的正确方法是什么?