Grep或部分字符串

时间:2015-04-23 16:24:50

标签: regex bash grep

美好的一天,

文件名可以是

  1. abc_source_201501.csv或,
  2. abc_source2_201501.csv
  3. 是否可以在没有完全列出文件名的情况下执行类似grep abc_source|source2_201501.csv的操作,因为我正在使用的文件名比获取这两个选项的示例要长得多?

    感谢您的帮助。

4 个答案:

答案 0 :(得分:2)

在grep中使用扩展的正则表达式标志。

例如:

grep -E abc_source.?_201501.csv

会在您的示例中找到两行。您可以考虑更适合您数据的其他正则表达式模式。

答案 1 :(得分:0)

您可以一次使用Bash globbing grep in some files。

例如,grep for the string" hello"在文件名以abc_source开头并以201501.csv结尾的所有文件中,发出以下命令:

grep hello abc_source*201501.csv

您还可以使用-r标志在给定文件夹下的所有文件中递归grep - 例如当前文件夹(。)。

grep -r hello .

答案 2 :(得分:0)

如果您询问shell中文件名匹配的模式,Bash中的extended globbing工具允许您说

shopt -s extglob
grep stuff abc_source@(|2)_201501.csv

使用单个glob表达式搜索两个文件。

答案 3 :(得分:0)

最简单的可能性是使用大括号扩展:

grep pattern abc_{source,source2}_201501.csv

这与:

完全相同
grep pattern abc_source{,2}_201501.csv

您可以在一个单词中使用多个大括号模式:

grep pattern abc_source{,2}_2015{01..04}.csv

扩展为

grep pattern abc_source_201501.csv abc_source_201502.csv \
             abc_source_201503.csv abc_source_201504.csv \
             abc_source2_201501.csv abc_source2_201502.csv \
             abc_source2_201503.csv abc_source2_201504.csv