我有一个ls
命令,该命令为我提供了文件夹basename
的列表,如下所示:
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
这些文件夹从最旧的(第一个结果)到最新的(最后的结果)排序。
我有一个适当的逻辑,首先检查最新的逻辑:如果良好(我对文件夹的内容进行了一些检查)我想保留它,否则我想分析第二个新的(依此类推) )。
为此,我首先获得tail -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_CONTROL
并再次得到MY_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-]+$'
有人可以帮忙吗?
答案 0 :(得分:1)
使用正则表达式执行grep时,您缺少-E
,请添加grep -E