2017-05-08 41 views
1

我正在創建一個bash腳本來批量重命名圖像。目前我使用AWK:正則表達式將-001從test-image-001.png中刪除,但不是當它有前面的副本

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

當完全重命名test-image-001.pngtest-image.png

不過,我注意到,它也取代test-image-copy-001.png。當字樣copy-在前面時,它應該保留-001.png

我試着鍛鍊的獨家運營商,如:

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

但它不工作。有關如何在awk正則表達式中實現上述任何想法?

+1

應該是什麼'測試圖像複製001.png'輸出?它應該不會改變? – Inian

+0

查看正則表達式規則,'[]'是一個字符類,不能匹配其中的完整單詞。 – 123

+0

@inian完全不應該取代任何東西 –

回答

1

請勿爲此使用外部工具或正則表達式。 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 
+0

它複製的內容出現在字符串的其他位置? – 123

+1

@ 123固定,謝謝。 –

相關問題