Linux 尝试从管道输出grep文件路径

Linux 尝试从管道输出grep文件路径,linux,shell,unix,perforce,csh,Linux,Shell,Unix,Perforce,Csh,我需要在perforce中找到不符合我们所遵循的标准的文件路径 基本上,我们在perforce路径中添加新文件的标准方法是:-///depot/project/name/content//…… 此处应为字母数字,应仅为整数类型,例如:-1.0、1.1…等。所以我需要找到不符合以上标准的文件。这是我的命令,在这里我可以得到符合正确标准的输出路径。这是使用egrep的正确方法吗 p4 files //depot/project/name/content/... | egrep "//dep

我需要在perforce中找到不符合我们所遵循的标准的文件路径

基本上,我们在perforce路径中添加新文件的标准方法是:-
///depot/project/name/content//……

此处
应为字母数字,
应仅为整数类型,例如:-1.0、1.1…等。所以我需要找到不符合以上标准的文件。这是我的命令,在这里我可以得到符合正确标准的输出路径。这是使用egrep的正确方法吗

p4 files //depot/project/name/content/... | egrep "//depot/project/name/content/.+/[[:alnum:]]+"
假设p4命令OUTPUT中有以下行:-

//depot/project/name/content/cuda/sccm_2.1
//depot/project/name/content/cpla/test_3.1
//depot/project/name/content/ctest/arm_test
//depot/project/name/content/bfm/1.2
//depot/project/name/content/nvlog/1.0
我只对前三条路径感兴趣,即

//depot/project/name/content/cuda/sccm_2.1
//depot/project/name/content/cpla/test_3.1
//depot/project/name/content/ctest/arm_test

由于您没有给出可能的姓名列表,我创建了一个示例列表:

echo "//depot/project/name/content/gaga/1.1\n//depot/project/name/content/chomp{}/1.1\n//depot/project/name/content/kaka/99.7\n//depot/project/name/content/kuku/1"    
//仓库/项目/名称/内容/gaga/1.1
//depot/project/name/content/chomp{}/1.1
//仓库/项目/名称/内容/卡卡/99.7
//仓库/项目/名称/内容/库库/1

为了找到这两个匹配项,我使用了
grep-p
(因为perl regexp更友好)

//仓库/项目/名称/内容/gaga/1.1
//depot/project/name/content/kaka/99.7

现在,如果您的版本可能缺少点,您可以将regexp更改为
“//仓库/project/name/content/\w+/\d+\.?\d*”

最后,但并非最不重要的一点——如果您已经使用完整路径调用了p4命令,您可能可以忽略regexp中的路径,因为它是由您给定的

更新
根据您提供的输入,将regexp更新为
grep-P//depot/project/name/content/\w+/[a-zA-Z]\w+(\d\.\d+)?

如果文件名可能以非字母符号开头,请将其添加到方括号中

> echo "//depot/project/name/content/cuda/sccm_2.1\n//depot/project/name/content/cpla/test_3.1\n//depot/project/name/content/ctest/arm_test\n//depot/project/name/content/bfm/1.2\n//depot/project/name/content/nvlog/1.0" | grep -P "//depot/project/name/content/\w+/[a-zA-Z]\w+(\d\.\d+)?"
//depot/project/name/content/cuda/sccm_2.1
//depot/project/name/content/cpla/test_3.1
//depot/project/name/content/ctest/arm_test

<>我不清楚您是否想考虑诸如“代码> 1”/代码>或<代码> 1.2.3无效的版本。这将两者视为无效,并要求版本号只有一个
。如果需要,可以很容易地修改正则表达式:

awk '$NF !~ /^[0-9]*\.[0-9]*$/' FS=/ input

下面的grep命令使用与所需路径匹配的正则表达式,但也使用
-v
选项反转匹配。这具有返回不需要的路径的效果:

grep -v -E "\/\/depot\/project\/name\/content\/[[:alnum:]]*\/([0-9]+\.?)*[0-9]+"
正则表达式不允许
开头或结尾。另外,
[:alnum::
不包括
\uu
-
,因此如果需要,必须添加这些

因此,根据这些数据:

//depot/project/name/content/cuda/sccm_2.1
//depot/project/name/content/cpla/test_3.1
//depot/project/name/content/ctest/arm_test
//depot/project/name/content/bfm/1.2
//depot/project/name/content/nvlog/1.0
//depot/project/name/content/nvlog/.0
//depot/project/name/content/bfm/10.2
//depot/project/name/content/bfm/10.2.1.7
//depot/project/name/content/nvlog/123545
它将返回:

//depot/project/name/content/cuda/sccm_2.1
//depot/project/name/content/cpla/test_3.1
//depot/project/name/content/ctest/arm_test
//depot/project/name/content/nvlog/.0

我想这就是你想要的,但如果不是,请告诉我。

你能举例说明你想要的和不想要的吗?您可以将项目名称更改为kuku、gaga等以隐藏它们…嗨,我需要排除文件路径中只有整数。换句话说,一些项目文件中有字母数字,我需要列出它们。如果问题不清楚,很抱歉。。有些路径同时包含整数和字母,即字母数字。我只对这些路径感兴趣。那么,p1.1版可以,1.1版不行?再一次-一些输入的例子将被更新我的查询。。。我只对有字母数字或字母表版本的路径感兴趣。
//depot/project/name/content/cuda/sccm_2.1
//depot/project/name/content/cpla/test_3.1
//depot/project/name/content/ctest/arm_test
//depot/project/name/content/nvlog/.0