Bash globbing에서 일치하는 값을 재사용하는 방법은 무엇입니까? [복사]

Bash globbing에서 일치하는 값을 재사용하는 방법은 무엇입니까? [복사]

와일드카드 경로에서 일치하는 항목을 재사용할 수 있는지 궁금합니다. (보통 정규식 교체로 수행할 수 있는 것처럼요?)

다음 예에 대한 다른 해결 방법이 있다는 것을 알고 있지만 제가 요청하는 내용의 예일 뿐입니다. 현재 폴더에 파일이 있고 이름을 , file_1.txt, file_2.txt, ..., file_100.txt로 바꾸고 싶다고 가정해 보겠습니다. 일치시킬 수 있지만 대상 파일 이름을 지정하기 위해 일치하는 항목을 어떻게든 재사용할 수 있습니까 ?asdf_1_qwer.txtasdf_2_qwer.txt, ..., asdf_100_qwer.txtfile_*.txt*

답변1

셸에는 정규식 캡처 그룹과 직접적으로 동등한 것이 없지만 설명하는 작업은 일반적으로 변수를 사용하여 수행됩니다. 예를 들어:

$ for f in file_*.txt; do
   number="${f/file_/}" 
   number="${number/.txt/}" 
   printf 'The number from file "%s" is "%d"\n' "$f" "$number"
done
The number from file "file_1.txt" is "1"
The number from file "file_2.txt" is "2"
The number from file "file_3.txt" is "3"

또는 sed대신 사용쉘 문자열 조작:

$ for f in file_*.txt; do    
    number=$(sed -E 's/^file_([0-9]+)\.txt/\1/' <<<"$f"); 
    printf 'The number from file "%s" is "%d"\n' "$f" "$number"; 
done
The number from file "file_1.txt" is "1"
The number from file "file_2.txt" is "2"
The number from file "file_3.txt" is "3"

관련 정보