Дві дуже схожі лінії 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*
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 ваш внесок, якщо вам подобається: 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.