gpt4 book ai didi

regex - 如何在目录中匹配这种文件名模式,并输出匹配的?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:07:15 27 4
gpt4 key购买 nike

这个目录下有很多文件:

[ichen@ui01 data]$ ls
data.list
data.root
ntuple.data15_13TeV.00276262.DAOD_FTAG2.root
ntuple.data15_13TeV.00276329.DAOD_FTAG2.root
ntuple.data15_13TeV.00276336.DAOD_FTAG2.root
ntuple.data15_13TeV.00276416.DAOD_FTAG2.root
ntuple.data15_13TeV.00276511.DAOD_FTAG2.root

我想制作一个列表,其中只包含那些具有以下模式的文件:

    [many chars].[many chars].[many numbers].[many chars].root

匹配如下文件名:

ntuple.data15_13TeV.00276262.DAOD_FTAG1.root
ntuple.data15_13TeV.00276329.DAOD_FTAG2.root
ntuple.data15_13TeV.00276336.DAOD_FTAG3.root
etc...

我如何使用正则表达式来实现这个目标?也许我们可以使用这种语法:

for f in `ls`;do if [....];then echo $f;fi;done  > log.list

最佳答案

在正则表达式领域,条条大路通罗马。 :)

ls | egrep '^\w*\.\w*\.[0-9]*\.\w*\.root$'

^ 标记一行的开始$ 标记一行的结尾\w 是一个单词字符\w* 是许多工作字符.是一个文字 '.'字符,一个未屏蔽的 '.'在正则表达式中代表“任何字符”[0-9] 是 0 到 9 之间的任意数字

对于您的具体示例:

for f in `ls`;do echo $f | egrep '^\w*\.\w*\.[0-9]*\.\w*\.root$';done

现在包括 if 语句:

for f in `ls`; do if [[ $f =~ '\w*\.\w*\.[0-9]*\.\w*\.root' ]]; then echo $f; fi; done

在这种情况下,我必须删除开头和结尾的行 (^...$) 才能匹配。不知道为什么。通常,=~ 将检查正则表达式。

关于regex - 如何在目录中匹配这种文件名模式,并输出匹配的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37431671/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com