Normal ifadeden değer nasıl elde edilir


0

Doğru şekilde mi soruyorum yoksa mümkün olup olmadığından emin değilim. Bazı dosyaların isimlerini kendi isimlerini kullanarak değiştirmek istiyorum.

Diyelim ki file1, file2 ve file3. Gibi bir şey yapmak istiyorum:

mv file* file{recover_number}_xyz

Almak için: file1_xyz, file2_xyz ve file3_xyz

Yanıtlar:


1

Örneğin, tüm dosya adına bir regex arama ve değiştirme uygulayabilen araçlar vardır perl-rename( örneğin, genel olarak da adlandırılır prename). Bu tür araçlarda, bir "yakalama grubu" (parantez) içinde \d+veya [0-9]+içinde birden çok rakam eşleşecek ve daha sonra programa $1veya \1programa göre başvuracaksınız .

Örneğin:

prename -v 's/file(\d+)$/file$1_xyz/' file[123]

prename -v 's/(file\d+)$/$1_xyz/' file[123]

( -vSeçenek, ön adın değişiklikleri -nyazdırmasını sağlar. Değişiklikleri gerçekten yeniden adlandırmadan yazdırmak için kullanabilirsiniz .)

Bunu sadece mvve sed: kullanarak da başarabilirsiniz.

for old in file[123]; do
    new=$(sed -r 's/file([0-9]+)$/file\1_xyz/' <<< "$old")
    mv -v "$old" "$new"
done

Ama yakından bakarsanız , sayıya ihtiyacınız yok. Tek yapmanız gereken, yine de bazı statik metinler eklemek.

prename 's/$/_xyz/' file[123]

for f in file[123]; do
    mv "$f" "${f}_xyz"
done
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.