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,同样的问题。