我试图想出一个正则表达式,它返回一个文件夹中的某个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
的情况。可能是因为括号和/或缺点。
答案 0 :(得分:3)
无需使用ls
和grep
。
使用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