匹配在特定位置文件名中具有0000的文件

时间:2018-07-11 14:25:04

标签: regex bash

我有数百个这样的文件:

201670000_FOR1.xml
201670000_GAL0.xml
201670000_GAL1.xml
20184301_2.xml
20184301_3.xml
20184301_4.xml

我需要匹配位置6-9上具有0000的所有文件。前三个文件应匹配,下三个文件不匹配。我尝试过:

find -E . -regex '/^.{6}0000*/' | wc -l

,但结果为零。正确的正则表达式是什么样子?

2 个答案:

答案 0 :(得分:1)

斜杠不能是文件名的一部分。带他们出去。 (某些工具确实需要使用斜杠作为正则表达式的分隔符,但git branch <branch>绝对不是其中之一。)

您的示例在零之前都具有五个字符,而不是六个字符,并且find仅匹配零,而不是零,后跟任何字符(即0*),因此您可能想要{{1 }}

更经济,更简洁

0.*

匹配当前目录中具有此模式的所有文件,并且

^.{5}0{4}.*

在许多shell中,都递归地检查所有子目录(但是wc -l ?????0000* 不能正确移植到POSIX wc -l **/?????0000* )。

从您的问题中尚不清楚您是否要检查子目录,但是**也会始终检查子目录,除非您明确要求不要这样做。在具有许多子目录的树上,这可以显着提高性能。

答案 1 :(得分:1)

您可以使用以下df %>% group_by(loc, year) %>% dplyr::summarise(lower.x = quantile(c(x1, x2, x3, x4, x5, x6 , x7, x8), probs = 0.025), mean.x = quantile(c(x1, x2, x3, x4, x5, x6 , x7, x8), probs = 0.5), upper.x = quantile(c(x1, x2, x3, x4, x5, x6 , x7, x8), probs = 0.975)) 正则表达式:

# A tibble: 8 x 5
# Groups:   loc [?]
    loc  year     lower.x     mean.x   upper.x
  <int> <int>       <dbl>      <dbl>     <dbl>
1     1  1980 -1.12583212  0.1683845 1.1579655
2     1  1981 -1.20363611 -0.1399433 1.9308253
3     1  1982 -0.93238412 -0.3195850 0.3835611
4     1  1983 -2.08331501 -0.4235632 1.2267823
5     2  1980 -1.46528453 -0.3096375 0.9863813
6     2  1981 -1.51563211  0.1100798 0.8267675
7     2  1982 -1.16435350  0.1885864 0.8349510
8     2  1983 -0.01427533  0.4301591 1.9688637

find

正则表达式详细信息:

  • find -E . -regex '.*/.{5}0{4}.*' ./201670000_GAL0.xml ./201670000_FOR1.xml ./201670000_GAL1.xml
  • 之前的文件名部分匹配
  • .*匹配/之后的前5个字符
  • 然后我们使用.{5}匹配4个零点
  • 最后/个剩余字符。

您还可以通过以下 glob模式 避免正则表达式:

0{4}