不包含空格后跟数字的字符串

时间:2016-09-28 07:05:15

标签: regex string bash

我试图想出一个正则表达式,它返回一个文件夹中的某个jpeg文件名,该文件夹不包含空格,后面跟着文件名末尾的数字,例如,002504_GDG_EN_160902.jpeg就可以了,{{1}不是。

我最好的猜测是,002504_GDG_EN_160902 5.jpeg是没有后缀和任何数字的文件名(例如$file):

002504_GDG_EN_160902

这适用于上述示例,但不适用于test=$(ls *.jpeg | sort | grep $file | grep -v '.*\s\d\.jpeg') $file的情况。可能是因为括号和/或缺点。

2 个答案:

答案 0 :(得分:3)

无需使用lsgrep

使用extglob

shopt -s nullglob
shopt -s extglob

printf "%s\n" +([^[:blank:]]).jpeg
002504_GDG_EN_160902.jpeg

或者在数组中存储匹配的文件名:

files=(+([^[:blank:]]).jpeg)

+([^[:blank:]]).jpeg会将文件名与一个或多个非空格字符匹配,后跟.jpeg

答案 1 :(得分:1)

示例数据:

ls -1
002504_GDG_EN_16090 2.jpeg
002504_GDG_EN_160901 32.jpeg
002504_GDG_EN_1609012.jpeg
002504_GDG_EN_1609013.jpeg
2016_MUC-Werk_[B_DGF_LA_LZ_R]_FG-8_all_160926

使用数组的解决方案:

array=(*)
printf "%s\n" "${array[@]}" |grep -Pv  '\d\s\d.*(.jpeg|$)'
002504_GDG_EN_1609012.jpeg
002504_GDG_EN_1609013.jpeg
2016_MUC-Werk_[B_DGF_LA_LZ_R]_FG-8_all_160926

将其存储在任何变量中:

var=$(printf "%s\n" "${array[@]}" |grep -Pv  '\d\s\d.*(.jpeg|$)')

echo "$var"
002504_GDG_EN_1609012.jpeg
002504_GDG_EN_1609013.jpeg
2016_MUC-Werk_[B_DGF_LA_LZ_R]_FG-8_all_160926