【问题标题】:Search for a pattern in a filename in linux在linux中搜索文件名中的模式
【发布时间】:2013-08-28 00:38:39
【问题描述】:

以下是一些示例文件名:

1_0_1_2A34_8_70_1680000_0_0_0.png

1_0_1_1_1A2C_1_5A2F16_0_0_0.png

1_0_1_3EC_6_601_D7A0000_0_0_0.png

1_0_1_152D_7E3_2_11A2F26_0_0_0.png

首先,我试图让 linux 将文件名识别为由下划线“_”分隔的 10 列文本。

例如:

col1_col2_col3_col4_col5_col6_col7_col8_col9_col10.png

然后我想告诉 linux 在文件名的第 7 列的前 3 个字符中搜索一个字符串(例如“11A”)。

我有数千个这样的文件,如果我定期搜索“11A”,我将获得包含 11A 但在第 4、5 和 7 列中的文件的匹配项。

【问题讨论】:

    标签: linux string search filenames


    【解决方案1】:

    这是一个 Perl 脚本(我们称之为 match7th.pl),它将打印出第 7 个字段与给定模式匹配的任何行(例如 11A):

    #!/usr/bin/perl -w
    use strict;
    my $pat = qr/$ARGV[0]/;
    while (<STDIN>) {
        my (undef, undef, undef, undef, undef, undef, $seventh) = split /_/;
        print if defined($seventh) && $seventh =~ $pat;
    }
    

    像这样运行它:

    find . -name '*.png' | perl match7th.pl 11A
    

    【讨论】:

    • 太好了,感谢您的快速回复。我现在将对此进行测试并报告。当您回复请求搜索仅查看第 7 列的前 3 个字符时,我正在编辑原始问题。我可以将其合并到 find 命令或脚本中吗?
    • 不工作?让我知道出了什么问题,这可能很容易解决。
    • 这对我的朋友很有帮助,现在我只需要将匹配的结果移动到一个新文件夹...我使用 find 的旧方法是这样的:find /folder -type f -iname "11A" \ -exec mv -t /new_folder/25.5E {} \+
    • 澄清一下,perl 脚本在搜索方面完全符合我的要求,如果我可以一次添加 2 个或更多搜索字符串,那就太好了。 find . -name '*.png' | perl match7th.pl 11A,D7A 但这不起作用..最后我想将结果移动到一个新文件夹..谢谢你的时间克里斯
    • 您可以使用| 正则表达式运算符进行多个搜索,例如perl match7th.pl '11A|D7A'(不要忘记引号,否则您的shell 会误解|)。然后,您可以通过管道发送到 xargs mv -t /new_folder/25.5E 进行移动。
    猜你喜欢
    • 2012-06-18
    • 2019-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-13
    • 1970-01-01
    相关资源
    最近更新 更多