Regex 正则表达式从test-image-001.png中删除-001,但在前面有副本时不删除

Regex 正则表达式从test-image-001.png中删除-001,但在前面有副本时不删除,regex,bash,awk,Regex,Bash,Awk,我正在创建一个bash脚本来批量重命名图像。目前我使用awk: $(echo${file}awk'{gsub(/\-00[0-9].png/,“”)}1') 将test-image-001.png完全重命名为test-image.png 但是我注意到它也替换了test-image-copy-001.png。当单词copy-在前面时,它应该将-001.png留在原位 我尝试对独家运营商进行如下训练: \-00[0-9][^copy \-00].png 但它不起作用。关于如何在awk正则表达式中实现

我正在创建一个bash脚本来批量重命名图像。目前我使用awk:

$(echo${file}awk'{gsub(/\-00[0-9].png/,“”)}1')

test-image-001.png
完全重命名为
test-image.png

但是我注意到它也替换了
test-image-copy-001.png
。当单词
copy-
在前面时,它应该将
-001.png
留在原位

我尝试对独家运营商进行如下训练:

\-00[0-9][^copy \-00].png


但它不起作用。关于如何在awk正则表达式中实现上述功能的任何想法?

不要为此使用外部工具或正则表达式。Bash可以处理所有这些操作:

files=( test-image-001.png test-image-copy-001.png )

for file in "${files[@]}"; do
    if [[ $file = *copy-00[[:digit:]]* ]]; then
        newfile=$file
    else
        newfile=${file/-00[[:digit:]]} # or newfile=${file/-00[0-9]}
    fi
    echo "$file -> $newfile"
done
输出为:

test-image-001.png -> test-image.png
test-image-copy-001.png -> test-image-copy-001.png

test-image-copy-001.png的输出应该是什么?是否不应更改?请查找正则表达式规则,
[]
是一个字符类,您无法匹配其中的完整单词。@确切地说,它不应替换任何内容。它必须在awk中吗?我认为perl更适合这种情况。@123它不必是awk,但需要在bash中工作,输出需要存储在变量中。它复制的内容显示在字符串的其他地方?