두 가지 매우 유사한 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' _ {} +

그냥 궁금해서 : 그 이상한 굵게 / 패딩 된 브래킷을 생성 한 것은 무엇인가? 【】? ( 왼쪽 검은 색 렌티큘러 브라켓 오른쪽 검은 색 렌티큘러 브라켓 .)
Arjan

답변:


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 너의 upvote 원한다면 : P와 remove를 잊지 마세요. -n 옵션을 사용하여 실제 이름을 바꿉니다.
αғ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

대답은 @남자 이름 없이는 더 좋을거야. 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' _ {} +
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.