如何选择文件1-88

时间:2012-10-02 06:56:57

标签: regex bash sed

我在名为OIS001_OD_EYE_MIC.png的目录中有一个文件 - OIS176_OD_EYE_MIC.png

这个正则表达式显示的提取数字1-99很容易。 我希望1-88将目录分成两半。

为什么呢?所以我可以有两组偶数文件来压缩

ls | sed  -n '/^[A-Z]*0[0-9][0-9].*EYE_MIC.png/p'

这是我尝试获得0-99。你能帮助我得到1-88,也许89-176?

4 个答案:

答案 0 :(得分:5)

您可以使用范围:{start..end},如下所示:

echo OIS00{0..88}_OD_EYE_MIC.png

将扩展为

OIS000_OD_EYE_MIC.png OIS001_OD_EYE_MIC.png [...] OIS0087_OD_EYE_MIC.png OIS0088_OD_EYE_MIC.png

在bash的手册页中查找 Brace expansion

答案 1 :(得分:4)

使用足够新的bash:

ls OIS0{01..88}_OD_EYE_MIC.png

答案 2 :(得分:1)

使用正则表达式时,您必须考虑某些数字范围的字符串的外观(您不能直接匹配特定的数字范围)。 1-88:

/^[A-Z]*(00[1-9]|0[1-7][0-9]|08[0-8]).*EYE_MIC.png/

对于88 - 176:

/^[A-Z]*(089|09[0-9]|1[0-6][0-9]|17[0-6]).*EYE_MIC.png/

Here are some more examples.

答案 3 :(得分:1)

这是一个管道并行替代方案:

ls -v | columns --by-columns -c2 | tr -s ' '   \
| tee >(cut -d' ' -f1 | tar cf part1.tar -T -) \
      >(cut -d' ' -f2 | tar cf part2.tar -T -) > /dev/null

如果文件名称中有空格,则此方法需要更多工作。

我们的想法是列出文件列表并使用tee将其复制到单独的压缩过程中。

columns程序附带autogen程序包(至少在Debian中)。