기존 모델 현황

기존 모델 현황
  • 펄 이름 바꾸기 1.14-1

  • 아치 리눅스: 리눅스 6.2.12.arch1-1

다음 패턴 중 하나로 이름이 지정된 여러 하위 디렉터리가 있는 디렉터리/폴더가 있습니다.

기존 모델 현황

something-AAA-2023-01-BBB (the most common pattern)
something-2023-01-AAA.BBB (the 2nd or 3rd most common pattern)
2023-01-AAA-BBB-CCC.DDD (the 2nd or 3rd most common pattern)
something-AAA-2023-01-BBB-CCC.DDD   
1111-AAA-2023-01-BBB.CCC
1111-2023-01-AAA.BBB

모드 정보:

  • "something"은 항상 문자열이고 "1111"은 숫자입니다.
  • 그 중 일부는 명확성을 위해 "2023-01"로 표시되는 YYYY-MM 형식의 날짜입니다.
  • AAA, BBB 등 대문자 3자리 부분은 폴더 전체의 맥락에서 의미가 있는 평범한 단어일 때도 있고, 폴더 전체의 맥락에서도 의미가 있는 문자와 숫자의 뒤섞인 조합일 때도 있습니다. . AAA, BBB 등은 모두 폴더의 맥락에서 의미가 있는 표현입니다.
  • 시간이 지나면서 폴더 이름에 추가 정보를 추가했는데, 이것이 바로 CCC와 DDD가 있는 이유입니다.

예상 출력

이러한 일이 발생하기 전에 요소("1111", AAA, BBB 등)가

1111.AAA.2023-01.something.BBB.CCC.DDD

먼저 첫 번째 하이픈과 두 번째 하이픈(있는 경우) 사이에 있는 내용을 찾아 캡처하고 싶습니다.

나는 지금까지

perl-rename -n 's/^(.+)\-(.+)\-(\d{4}\-\d{2})\-(.+)/\3\.\1\./' *

그러나 그것은 실제로 "똑똑한" 것은 아닙니다. 날짜가 첫 번째와 두 번째 하이픈 사이 또는 두 번째와 세 번째 하이픈 사이, (\d{4}\-\d{2})날짜 전후 인지 확인하는 방법이 있나요 ? 아니면 날짜 전후의 내용을 정의하는 괄호 수로 다양한 사례를 모두 찾아야 합니까? (내 영어로 미안해요)

아니면 해당 날짜 문자열 앞의 하이픈이 두 번째 하이픈인지 확인하는 방법은 무엇입니까? 특정 문자가 n번째로 나타나는 것을 찾는 것은 나중에 확실히 도움이 될 것입니다.

답변1

구분 기호를 기준으로 열을 분할 autosplit하는 패턴을 사용하여 유사한 접근 방식을 시도할 수 있습니다 . 이렇게 하면 작업이 더 쉬워집니다.-F-

자동으로 생성된 배열에서 날짜 문자열이 있는 n번째 요소의 위치를 ​​찾으려면 @F다음 코드를 사용하십시오.

$ ls
1111-AAA-2023-01-BBB.CCC
$ perl -F'-' -nE '
    foreach my $i (keys @F) { say $i if "$F[$i]-$F[$i+1]" =~ m/\d{4}-\d{2}/; }
' < <(printf '%s\n' *)
2
  1111-AAA-2023-01-BBB.CCC
# ^^^^ ^^^ ^^^^ ^^ ^^^^^^^
#  0    1   2    3    4     keys of @F array

2연도를 포함하는 배열 요소의 키입니다. 다음 요소는 월입니다.

이제 이를 바탕으로 이름을 바꿔야 하는 입력 파일과 예상되는 출력을 나에게 제공하면 rename.

관련 정보