Linux ';ls';Bash中的命令-匹配数字
我有一个包含以下文件的目录:Linux ';ls';Bash中的命令-匹配数字,linux,bash,ls,Linux,Bash,Ls,我有一个包含以下文件的目录: root.o root.type1 root.type2 root.type1.c root.type2.c root.type1.c.pa0 root.type2.c.pa0 root.type2.c.pa1 root.type2.c.pa2 root.type2.c.pa3 .... root.type2.c.pa100 root.type2.c.pa0.out root.type2.c.pa1.out root.type2.c.pa2.out root.typ
root.o
root.type1
root.type2
root.type1.c
root.type2.c
root.type1.c.pa0
root.type2.c.pa0
root.type2.c.pa1
root.type2.c.pa2
root.type2.c.pa3
....
root.type2.c.pa100
root.type2.c.pa0.out
root.type2.c.pa1.out
root.type2.c.pa2.out
root.type2.c.pa3.out
...
root.type2.c.pa100.out
我想列出以root.type2.c.pa.
开头并以数字结尾的文件,不包括以.out
结尾的文件。换句话说,我想列出这个区块:
root.type2.c.pa0
root.type2.c.pa1
root.type2.c.pa2
root.type2.c.pa3
....
root.type2.c.pa100
写ls root.type2.c.pa?
,ls root.type2.c.pa???
,和ls root.type2.c.pa???
就可以了
这是一种简单的方法来列出数据块,而不知道所需文件末尾有多少数字吗?在上面的例子中,我们最多有3个数字。实际上,我可能有1、2、3、4或5个数字。使用grep和正则表达式:
shopt -s extglob
ls root.type2.c.pa+([0-9])
ls |grep -P "root.type2.c.pa[0-9]+$"
使用grep和正则表达式:
ls |grep -P "root.type2.c.pa[0-9]+$"
试试这个:
ls -1 | grep -oP "root.type2.c.pa\d{1,}"
试试这个:
ls -1 | grep -oP "root.type2.c.pa\d{1,}"
当命令行包含shell通配符(
*
,?
,[…]
)时,ls
列出的文件名列表不是由ls
决定的。shell展开通配符并将匹配的文件名列表传递给lsls
仅显示包含或不包含其他详细信息(大小、所有者、权限、日期等)的文件名
一种可能的解决方案是使用通配符为ls
组成一个命令行,其中包括所有必需的文件(可能还有其他文件),然后将输出通过管道传输到grep
,并使用它仅过滤所需的文件:
ls -1 root.type2.c.pa* | grep '^root\.type2\.c\.pa\d\+$'
工作原理:
-列出名称以ls-1 root.type2.c.pa*
开头的所有文件root.type2.c.pa
告诉-1
在单独的一行上显示每个文件名李>ls
过滤grep'^root\.type2\.c\.pa\d\+$”
的输出,只保留以ls
开头的名称,后跟至少一个数字(root.type2.c.pa
),而不保留任何其他名称(\d\+
是行尾)$
*
,?
,[…]
)时,ls
列出的文件名列表不是由ls
决定的。shell展开通配符并将匹配的文件名列表传递给lsls
仅显示包含或不包含其他详细信息(大小、所有者、权限、日期等)的文件名
一种可能的解决方案是使用通配符为ls
组成一个命令行,其中包括所有必需的文件(可能还有其他文件),然后将输出通过管道传输到grep
,并使用它仅过滤所需的文件:
ls -1 root.type2.c.pa* | grep '^root\.type2\.c\.pa\d\+$'
工作原理:
-列出名称以ls-1 root.type2.c.pa*
开头的所有文件root.type2.c.pa
告诉-1
在单独的一行上显示每个文件名李>ls
过滤grep'^root\.type2\.c\.pa\d\+$”
的输出,只保留以ls
开头的名称,后跟至少一个数字(root.type2.c.pa
),而不保留任何其他名称(\d\+
是行尾)$
something.root.type2.c.pa01
,如果你在管道ls
,你不需要-1
,你也不应该解析ls
的输出。它也匹配文件something.root.type2.c.pa01
,如果你在管道ls
,你不需要-1
,而且无论如何,您都不应该解析ls
的输出。这还匹配blah.root.type2.c.pa01等文件,并为名称中有换行符的文件提供断点。这还匹配blah.root.type2.c.pa01等文件,并为名称中有换行符的文件提供断点。