正则表达式比较 github 链接并列出以相同名称结尾但具有不同所有者的存储库

正则表达式比较 github 链接并列出以相同名称结尾但具有不同所有者的存储库

我经常克隆 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.*'(尽管这不会包括当前会话中的命令)

相关内容