RegEx:如何获取名称包含小时13到20的文件

时间:2017-04-05 09:46:09

标签: regex bash

我想获取名称中包含13到20之间小时的文件名。

实施例。我在文件夹下面有文件。

$ ls
A_13_a.txt  A_14_a.txt  A_17_a.txt  A_20_a.txt  A_21_a.txt

其中数字代表小时。

我想执行将返回名称的命令。

A_13_a.txt  A_14_a.txt  A_17_a.txt  A_20_a.txt

我尝试过以下命令,但没有给出正确的输出。

ls | egrep 'A_[1][3-9]_a.txt | A_[2][0-0]_a.txt'

ls | grep 'A_[1][3-9]_a.txt'

2 个答案:

答案 0 :(得分:2)

另一种选择是:

ls | awk -F_ '{ if ( $2 > 12 && $2 < 21 ) print $0 }'

答案 1 :(得分:1)

您需要将要解析的点转义为文字点,并使用交替组 (1[3-9]|20)egrep,如下所示:

ls | egrep 'A_(1[3-9]|20)_a\.txt'
              ^^^^^^^^^^   ^

(1[3-9]|20)与以下两种选择中的任何一种匹配:

  • 1[3-9] - 1后面跟着39的数字
  • | - 或
  • 20 - 文字字符序列20