我如何将bash转换为sh

时间:2018-09-24 19:11:53

标签: bash expression sh

我想使用正则表达式,它可以在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

1 个答案:

答案 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 {} \;