Regex 使用正则表达式筛选通过ls获得的文件夹列表 上下文

Regex 使用正则表达式筛选通过ls获得的文件夹列表 上下文,regex,bash,Regex,Bash,我有一个ls命令,它给我一个文件夹basenames的列表,如下所示: INPUT: bash$ ls -d /nfs_archivedbuilds/build/mx/${VERSION_NAME}/${OPERATING_SYSTEM}/* | xargs -n1 basename OUTPUT: 4750070-190311-0913-3603182 4761979-190319-SHELVE-3617880 4763232-190319-2049-3618496 4763232-190

我有一个
ls
命令,它给我一个文件夹
basename
s的列表,如下所示:

INPUT:
bash$ ls -d /nfs_archivedbuilds/build/mx/${VERSION_NAME}/${OPERATING_SYSTEM}/* | xargs -n1 basename

OUTPUT: 
4750070-190311-0913-3603182
4761979-190319-SHELVE-3617880
4763232-190319-2049-3618496
4763232-190320-SHELVE-3619115
4764259-190320-1402-3619606
4764259-190320-cifx-6274238
4764339-190320-2049-3620637
4764339-190320-SHELVE-3620115
4764339-190320-cifx-6274274
这些文件夹按最早(第一个结果)到最新(最后一个结果)的顺序排列

我有一个逻辑,从检查最新的开始:如果它是好的(我对文件夹的内容做了一些检查),我想保留它,否则我想分析第二个新的(等等)

为了做到这一点,我首先获取
尾部-1

SETUPS_CONTROL=1
MY_SETUP=$(ls -d /nfs_archivedbuilds/build/mx/${VERSION_NAME}/${OPERATING_SYSTEM}/* | xargs -n1 basename | tail -${SETUPS_CONTROL})
... doing some stuff to check
。。。如果结果不好,我增加
SETUPS\u CONTROL
并再次获得
MY\u SETUP
,这次是
+1
尾部

问题: 我希望保持相同的逻辑,但是能够过滤掉我的
ls
命令中已经存在的每个文件夹,这些文件夹不仅仅由数字组成。 例如:

  • 文件夹
    4750070-190311-0913-3603182
    对我有好处,因为它只有数字和破折号
  • 文件夹
    4761979-190319-SHELVE-3617880
    对我来说不好,因为它包含一个单词(
    SHELVE
    ),而且它不仅仅由数字和破折号组成
目前,当我应用我的循环来确定它是否好时,我必须对我获得的每个结果执行正则表达式来确定它是否好:

if [[ ${MY_SETUP} =~ "^[0-9-]+$" ]] 
then
    #my setup might be good
else
    #my setup is not good already, no need to further my checks
fi
这很好,但是我想知道我是否不能在
ls
命令中直接过滤列表,而不是获取任何内容,并且必须循环以了解它是否好

我的尝试 我已尝试将
grep“my regex expression”
导入命令:

ls -d /nfs_archivedbuilds/build/mx/${VERSION_NAME}/${OPERATING_SYSTEM}/* | xargs -n1 basename | grep "^[0-9-]+$"
。。。但它返回一个空结果。 与单报价相同:

ls -d /nfs_archivedbuilds/build/mx/${VERSION_NAME}/${OPERATING_SYSTEM}/* | xargs -n1 basename | grep '^[0-9-]+$'

有人能帮忙吗

使用正则表达式执行grep时缺少
-E
,请添加
grep-E

从正则表达式模式中删除双引号,
如果[${MY_SETUP}=~^[0-9-]+$]
@WiktorStribiżew nope,同样的问题。