Regex 正则表达式从test-image-001.png中删除-001,但在前面有副本时不删除
我正在创建一个bash脚本来批量重命名图像。目前我使用awk: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正则表达式中实现
$(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中工作,输出需要存储在变量中。它复制的内容显示在字符串的其他地方?