Dua garis sed yang sangat mirip, dapatkah mereka digabungkan?


1

Saya memiliki dua baris berikut dalam skrip shell dan bertanya-tanya apakah ada cara untuk menyingkatnya menjadi satu menggunakan sed. Saya tidak yakin apakah ada wildcard atau apa pun yang bisa menggantikan kata-kata Glitch dan Chill di ini, tetapi jika ada, saya ingin tahu. Yang paling penting adalah menghilangkan semua yang ada dalam tanda kurung aneh yang Anda lihat dan tidak ada yang tersentuh.

find . -type f -name '【Chill*' -execdir bash -c 'for file in "$@"; do new=$(echo "$file" | sed -r 's/【Chill.*】//'); mv -v "$file" "$new"; done' _ {} +  
find . -type f -name '【Glitch*' -execdir bash -c 'for file in "$@"; do new=$(echo "$file" | sed -r 's/【Glitch.*】//'); mv -v "$file" "$new"; done' _ {} +

Hanya ingin tahu: apa yang menghasilkan tanda kurung tebal / empuk itu 【】? ( BRAKET LENTIKULER HITAM KIRI dan BRAKET LENTIKULER HITAM KANAN .)
Arjan

Jawaban:


1

Tahukah Anda bahwa Anda dapat melakukan semuanya dengan menggunakan nama Perl:

$ rename -n 's:【Chill.*】|【Glitch.*】::' Chill* Glitch*
Chillxxfile1.ext  renamed as file1.ext
Chillyyfile2.ext  renamed as file2.ext
Glitchxxfile3.ext renamed as file3.ext
Glitchyyfile4.ext renamed as file4.ext

@ user401590 upvote Anda jika Anda suka: P dan jangan lupa hapus -nopsi untuk melakukan penggantian nama yang sebenarnya.
αғsнιη

1
find . -type f -name '【Chill*' -o -name '【Glitch*' -execdir bash -c 
'for file in "$@"; do 
   new=$(echo "$file" | sed -r 's/【Chill.*】\|Glitch.*】//');
   mv -v "$file" "$new";
 done' _ {} +

0

Jawaban @Cyrus baik, tetapi akan lebih baik tanpanya sed, dan dengan forloop yang disederhanakan :

find . -type f -name '【Chill*' -o -name '【Glitch*' -execdir bash -c 
'for file; do 
   new=${file/【Chill*】/};
   new=${new/【Glitch*】/};
   mv -v "$file" "$new";
 done' _ {} +
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.