我有一个目录内的文件列表,我想编写一个 bash 脚本,使用正则表达式检查其中的每个文件名是否都具有以下语法:
xxxx_xxxx_xx_xx
其中 x 是数字。
编辑:我只需要正则表达式
答案1
怎么样
#/usr/bin/env bash
for f in *
do
[[ $f =~ [0-9]{4}_[0-9]{4}_[0-9]{2}_[0-9]{2} ]] ||
echo "File $f does not match"
done
正则表达式检查任意数字([0-9]
)。花括号中的数字是重复次数,因此[0-9]{4}
将匹配任意 4 位数字。
我建议你不要使用 bash 来做这件事,而应该使用 find。它可能更快,而且更易于移植(并非所有 shell 都能处理正则表达式):
find -regextype posix-egrep -not -regex '\./[0-9]{4}_[0-9]{4}_[0-9]{2}_[0-9]{2}'
答案2
它很笨重,但应该非常便于携带:
/bin/sh #!/bin/sh 复制代码 对于 x 在 * 做 案例“$x” [0-9][0-9][0-9][0-9]_[0-9][0-9][0-9][0-9]_[0-9][0-9]_[0-9][0-9]_[0-9][0-9]) echo "$x 匹配" ;; *) echo "$x 不匹配" 埃萨克 完毕 # 更让人恼火的是, 对于 x 在 .* 做 echo "$x 不匹配" 完毕