Дві дуже схожі лінії sed, чи можна їх поєднувати?


1

У мене є наступні два рядки в сценарії оболонки, і мені було цікаво, чи є спосіб згустити їх в один за допомогою sed. Я не впевнений, чи є маска або щось, що могло б замінити слова Glitch і Chill, але якщо є, я хотів би знати. Важливо лише те, що він видаляє все з дивних дужок, які ви бачите, і більше нічого не торкається.

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' _ {} +

Просто цікаво: що породило ці дивні напівжирні / набиті дужки 【】? ( Ліва ЧОРНА сочевичним ОПОРА та RIGHT ЧОРНИЙ сочевичним ОПОРА .)
— Арьян

Відповіді:


1

Чи знаєте ви, що ви можете зробити все, використовуючи перейменування Perl:

$ rename -n 's:【Chill.*】|【Glitch.*】::' 【Chill* 【Glitch*
【Chillxx】file1.ext  renamed as file1.ext
【Chillyy】file2.ext  renamed as file2.ext
【Glitchxx】file3.ext renamed as file3.ext
【Glitchyy】file4.ext renamed as file4.ext

@ user401590 ваш внесок, якщо вам подобається: P і не забудьте видалити -nваріант, щоб виконати фактичне перейменування.
— αғsnιη

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

Відповідь @Cyrus хороша, але було б навіть краще без sedспрощеного forциклу:

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' _ {} +
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.