2017-05-08 2 views
1

イメージを一括して名前変更するためのbashスクリプトを作成しています。現在、私はawkを使用します。正規表現がtest-image-001.pngから削除されますが、コピーが前面に表示されていない場合は除外されます

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

を完璧に私はそれがまたtest-image-copy-001.pngに取って代わることに気づいしかしtest-image-001.png

test-image.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固定、ありがとうございます。 –

関連する問題