我想使用正则表达式,它可以在bash中使用,但是在sh
str=9009
for i in *v[0-9][0-9][0-9][0-9].txt; do echo "$i";
if ! [[ "$i" =~ $str ]]; then rm "$i" ; fi done
文件名如下:mari_v9009.txt femme_v9009.txt mari_v9010.txt femme_v9010.txt,mari.txt,femme.txt
所以我想删除这些文件:mari_v9010.txt femme_v9010.txt
答案 0 :(得分:4)
这可能是您想要的:
case $i in
*"$str"* ) # do nothing
;;
* ) rm "$i"
;;
esac
从您的评论看来,您实际上是在寻求帮助,而不是if
语句中的正则表达式。试试这个:
str=9009
for i in ./*v[0-9][0-9][0-9][0-9].txt; do
echo "$i" >&2
if [ -e "$i" ]; then
case $i in
*"$str"* )
echo "match for $str in $i" > &2
;;
* ) echo "no match for $str in $i" >&2
;;
esac
else
echo "no file name matching $i in directory" >&2
fi
done
并在测试后将echo
更改为您喜欢的任何内容。
还考虑不要执行上述任何一项操作,而是这样做:
find . -maxdepth 1 -name '*v[0-9][0-9][0-9][0-9].txt' ! -name "*$str*" -exec echo rm {} \;