gpt4 book ai didi

bash - 如何从我的 bash 历史记录中删除与特定模式匹配的行?

转载 作者:行者123 更新时间:2023-12-05 01:35:32 26 4
gpt4 key购买 nike

我可以获得与特定模式匹配的行号列表,例如包含单词“function”。

history | grep function | sed -e 's/^\(.\{5\}\).*/\1/' | sed 's/^ *//g'

如果我对它执行 history -d 它说模式不好,我不知道它是列表还是它们的字符串而不是数字?

history -d (history | grep function | sed -e 's/^\(.\{5\}\).*/\1/' | sed 's/^ *//g')

最佳答案

快速回答:

while read n; do history -d $n; done < <(history | tac | awk '/function/{print $1}')

解释:history 命令在使用 -d 标志时只接受一个偏移量。最重要的是,当您删除一个条目时,它还会重新编号该条目之后的所有命令。出于这个原因,我们使用 tac 恢复 history 的输出,并从最后到第一处理行。这个简短的 awk 行只是替换了 grep 和 sed 命令来获取历史偏移量。

我们不使用完整的管道,因为这会创建子外壳,history -d $n 将无法正常工作。这在以下内容中得到了很好的解释:Why can't I delete multiple entries from bash history with this loop

注意:如果你想把这个推送到你的历史文件($HISTFILE),你必须使用history -w

警告:当您的历史记录中有多行命令时,故事会变得非常复杂,并且在很大程度上取决于已设置的各种选项。参见 [U&L] When is a multiline history entry (aka lithist) in bash possible?对于讨厌的部分。

关于bash - 如何从我的 bash 历史记录中删除与特定模式匹配的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62793906/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com