我经常克隆 github repos 并在计算机上尝试它们。不幸的是,github repos 可能与其他用户的 repo 名称相同。
例如:
https://github.com/user1/app_name.git
https://github.com/user2/app_name.git
当我在终端中克隆一个 repo 时
git clone https://github.com/user1/app_name.git
它将存储库保存在斜线后的名称下,例如
app_name
如果我克隆第二个 repo,我会收到the repo exists
消息并且克隆 repo 中止。
我刚刚注意到了这一点,我想知道哪些存储库以这种方式中止。
为了找到它们我做了类似的事情
history | grep github.com
但是这列出了数百行,很难找到相同app_name
和不同的存储库user_name
。
对于正则表达式查询来说,这一定是一个非常简单的任务,但是如何做到呢?
答案1
history | grep -o 'github\.com.*' | tr '/' ' ' | sort -k3 | uniq | uniq -D -f2
解释
grep -o 'github\.com.*'
获取包含github.com
并修剪行首的行(如历史记录中的项目编号等),以便更轻松地处理字段tr '/' ' '
改为/
空格,因为uniq
没有选项设置非空白分隔符......sort -k3
使用第三个(最后一个)字段对行进行排序,将相同的行放在app_name.git
一起uniq
删除重复的行uniq -D -f2
忽略前两个字段,仅打印重复的行,(因此,只有在删除完全相同的行后,如果有多个实例,才打印该行app_name
,这表明有多个用户使用相同的app_name
)
如果您想避免命令本身出现在输出中,您可以使用管道grep -o 'github\.com.*' ~/.bash_history
而不是history | grep -o 'github\.com.*'
(尽管这不会包括当前会话中的命令)