Solaris - 获取以模式开头的目录名称

Solaris - 获取以模式开头的目录名称

我正在使用 Sun Solaris 10 操作系统,这是grep -o现代系统不允许的。我有以下目录列表,我试图获取DATA[0-9]仅以以下内容开头的任何目录

DATA34016
DATA34011
DATA34029
DATA34027
DATA34014
DATA34013
DATA34010
DATA34006
DATA34008
DATA34007
DATA34026
DATA34009
DATA34015
DATA34017
DATA34012
DATA34028
DATA34067
DATA34066
DATA34046
DATA34046dsd
DATA34046ttidid

预期结果 :

DATA34016
DATA34011
DATA34029
DATA34027
DATA34014
DATA34013
DATA34010
DATA34006
DATA34008
DATA34007
DATA34026
DATA34009
DATA34015
DATA34017
DATA34012
DATA34028
DATA34067
DATA34066
DATA34046

我的命令也遇到的主要问题DATA34046dsdDATA34046ttidid

命令 :

for i in $(ls -d */ | grep ^'DATA[0-9]'); do echo ${i%%/}; done

答案1

您可以简单地awk与范围运算符一起使用。如果您使用的是非常旧的版本awk,则可以明确指定范围间隔标志

awk '/^DATA[0-9]{5}$/' file
awk --re-interval '/^DATA[0-9]{5}$/' file

但话虽如此,您永远不应该解析ls.看为什么不应该解析 ls(1) 的输出,使用 shell 内置的 glob 功能。您可以执行以下操作来对目录名称运行循环

for dir in DATA[0-9][0-9][0-9][0-9][0-9]; do
    [ -d "$dir" ] || continue
    printf '%s\n' "$dir"
done

答案2

使用zsh外壳:

setopt extended_glob

for dir in DATA[[:digit:]](#c5)(/); do
    print $dir
done

要不就

printf '%s\n' DATA[[:digit:]](#c5)(/)

扩展的通配模式DATA[[:digit:]](#c5)(/)将匹配以字符串 开头DATA、后跟五个数字 ( [[:digit:]](#c5)) 且引用目录 ( (/)) 的任何名称。

相关内容