我有数百个这样的文件:
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
,但结果为零。正确的正则表达式是什么样子?
答案 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}