Unix/Linux 정규식과 () 일치

Unix/Linux 정규식과 () 일치

이름이 같은 파일이 두 개 있습니다.

(a).1
(a).2
...
(a).100

많은 처리 도구가 실제로 마음에 들지 않고 (파일 )이름에서 다른 이름으로 이름을 바꾸는 것이 가장 좋다고 생각했습니다. 파일 이름 바꾸기를 검색하다가 rename정규식을 입력할 수 있는 멋진 도구를 찾았습니다. 좋아, 이것을 시도해 보자:

$ rename -v s/\(a\)/b/ \(a\).* 

(a).1 renamed as (b).1
(a).2 renamed as (b).2
(a).3 renamed as (b).3

흠 내가 기대했던 것과는 다릅니다. 약간의 구글링 끝에 나는 \( \)그것이그룹화 연산자. 내가 ( )명령에서 탈출하지 않았기 때문에 어떤 종류의 의미가 있습니다 .

.모든 유형의 값과 일치하는 문자를 사용하여 이름 바꾸기 문제를 해결했습니다 .

rename -v s/.b./b/ \(b\).*

이 솔루션은 실제로 좋지 않습니다. 그렇다면 Bash/Linux/Unix Regex에서 어떻게 일치합니까 (?)

답변1

필요한 것은 다음과 같습니다.

find -name "(*)*" -type f | rename 's/\(|\)//g'

먼저 현재 디렉터리에서 설명된 이름과 일치하는 파일을 찾은 다음 대괄호를 제거하여 이름을 바꿉니다. 일치하는 문자( 및 )가 아무 것도 대체되지 않은 것을 볼 수 있습니다.

관련 정보