从Mercurial存储库中删除所有本地书签

时间:2019-07-04 20:25:21

标签: awk mercurial

hg bookmarks --delete可用于删除书签。

我是否可以通过某些bash脚本删除Mercurial存储库中的所有书签?我认为使用awk可以实现这一点-但这超出了我。

hg bookmarks输出的格式为(例如):

2018.02.706 Customer App 5255:c1321f7f3903
2018.02.707 Customer App 5255:c1321f7f3902

我只需要得到:

2018.02.706 Customer App
2018.02.707 Customer App

6 个答案:

答案 0 :(得分:2)

这应删除最后一个字段:

awk 'NF{NF--}1' file

这只是将最后一个字段设置为空:

awk '{$NF=""}1' file

答案 1 :(得分:2)

我认为this solution(进行了一些可能所需的更正)比起警告:纯水星,仅此而已

答案 2 :(得分:1)

awk 'sub($NF,"")' file

2018.02.706 Customer App 

2018.02.707 Customer App

答案 3 :(得分:1)

考虑到先前答复中的帮助,这是我用来删除水银书签的完整脚本:

htop

如果要确保删除前导空格和尾随空格,请使用以下内容:

hg bookmarks | awk 'NF' | awk 'sub($NF,"")' | awk '{print "hg bookmarks --delete \047" $0 "\047"}' > clear-bookmarks.sh

我的脚本编写经验无论如何都不是很好-但这似乎可以做到!

答案 4 :(得分:1)

如果您确实只想删除所有书签,则只需从存储库的隐藏.hg/bookmarks目录中删除.hg文件即可。

如果您将书签从远程位置拉出,书签可能会回来,因此您还必须执行hg book push -B 'your bookmark name'来从远程位置删除书签,但这对于任何人来说都是一个问题。其他删除书签的方法。

答案 5 :(得分:0)

假设输入中的空格为示例输入中出现的空白字符,则可移植且可靠地执行您在问题中要执行的操作:

$ sed 's/ [^ ]*$//' file
2018.02.706 Customer App
2018.02.707 Customer App

要获得输出,your answer中的命令行将产生:

$ sed 's/\(.*\) .*$/hg bookmarks --delete '\''\1'\''/' file
hg bookmarks --delete '2018.02.706 Customer App'
hg bookmarks --delete '2018.02.707 Customer App'

如果您强烈渴望使用awk,那就应该是:

$ awk '{sub(/ [^ ]+$/,"")}1' file
2018.02.706 Customer App
2018.02.707 Customer App

$ awk '{sub(/ [^ ]+$/,""); print "hg bookmarks --delete \047" $0 "\047"}' file
hg bookmarks --delete '2018.02.706 Customer App'
hg bookmarks --delete '2018.02.707 Customer App'

如果示例中的空格可以是单个空格以外的其他空格,请用/ [^ ]+$/替换/[[:space:]]+[^[:space:]]+$/