소개:
Bash에서 파일 작업을 할 때 파일 이름과 확장자를 분리해야 하는 경우가 종종 있습니다. 일반적인 접근 방식은 `cut` 명령을 사용하지만 이 방법은 마침표가 여러 개 포함된 파일 이름으로 인해 실패할 수 있습니다.
예를 들어 `a.b.js`와 같은 파일 이름은 `a.b` 및 `js` 대신 `a`와 `b.js`로 잘못 분할됩니다. Python은 `os.path.splitext()`를 사용하여 쉬운 솔루션을 제공하지만 Python을 사용하는 것이 항상 가장 효율적인 옵션은 아닐 수도 있습니다. 이 문서에서는 Bash에서 이 작업을 수행하는 더 나은 방법을 살펴봅니다.
명령 | 설명 |
---|---|
${variable%.*} | 파일 이름에서 확장자를 제거하는 매개변수 확장입니다. |
${variable##*.} | 파일 이름에서 확장자를 추출하는 매개변수 확장입니다. |
awk -F. | 파일 이름을 분할하는 데 사용되는 마침표로 필드 구분 기호를 설정합니다. |
OFS="." | 확장자 없이 파일 이름을 재구성하는 데 사용되는 awk의 출력 필드 구분 기호입니다. |
NF-- | awk에서 필드 수를 하나씩 줄여 확장을 효과적으로 제거합니다. |
${BASH_REMATCH} | Bash의 정규식에서 일치하는 항목을 보유하는 배열입니다. |
local variable | Bash의 함수 내에서 로컬 범위를 사용하여 변수를 선언합니다. |
Bash 솔루션의 세부 분석
제공된 스크립트는 Bash에서 파일 이름과 확장자를 분리하는 다양한 방법을 제공합니다. 첫 번째 스크립트는 Bash 매개변수 확장을 사용합니다. 변수 마지막 마침표부터 문자열 끝까지 모든 것을 제거하여 확장자를 제거합니다. 마지막 기간 이후의 모든 항목을 가져와 확장을 캡처합니다. 이 방법은 대부분의 파일 이름 구조에 대해 간단하고 효율적입니다. 두 번째 스크립트는 , Unix 계열 환경의 강력한 텍스트 처리 도구입니다. 다음을 사용하여 필드 구분 기호를 마침표로 설정 삼, 파일 이름을 여러 부분으로 나눌 수 있습니다. 출력 필드 구분 기호, , 다음을 사용하여 필드 수를 줄입니다. 확장자 없이 파일 이름을 재구성하는 기술입니다.
세 번째 스크립트는 Bash에서 정규식을 사용합니다. 정규식 일치에서 그룹을 캡처합니다. 이 스크립트는 파일 이름을 두 그룹(기본 이름용 그룹과 확장자용 그룹)으로 나누는 패턴을 사용합니다. 마지막으로, 사용자 정의 함수 스크립트는 함수 내에서 매개변수 확장 논리를 캡슐화하여 코드 재사용성과 가독성을 향상시킵니다. 그것은 사용한다 함수 내에서 변수 범위를 유지하도록 선언하여 더 큰 스크립트에서 의도하지 않은 부작용을 방지합니다. 각 방법은 Bash 스크립팅의 다양성과 강력함을 보여줌으로써 동일한 문제를 해결하는 서로 다른 접근 방식을 보여줍니다.
Bash에서 매개변수 확장 사용
배쉬 스크립팅
#!/bin/bash
# Script to extract filename and extension using parameter expansion
FILE="a.b.js"
FILENAME="${FILE%.*}"
EXTENSION="${FILE##*.}"
echo "Filename: $FILENAME"
echo "Extension: $EXTENSION"
Awk를 사용하여 파일 이름과 확장자를 분리
Awk로 배쉬
#!/bin/bash
# Script to extract filename and extension using awk
FILE="a.b.js"
FILENAME=$(echo "$FILE" | awk -F. '{OFS="."; NF--; print $0}')
EXTENSION=$(echo "$FILE" | awk -F. '{print $NF}')
echo "Filename: $FILENAME"
echo "Extension: $EXTENSION"
Bash에서 정규식 사용
정규식을 사용한 Bash 스크립팅
#!/bin/bash
# Script to extract filename and extension using regex
FILE="a.b.js"
[[ "$FILE" =~ (.*)\.(.*) ]]
FILENAME=${BASH_REMATCH[1]}
EXTENSION=${BASH_REMATCH[2]}
echo "Filename: $FILENAME"
echo "Extension: $EXTENSION"
Bash에서 사용자 정의 함수 사용
사용자 정의 기능을 사용한 Bash 스크립팅
삼
Bash에서 파일 조작을 위한 대체 방법 탐색
이미 논의한 방법 외에도 Bash에는 파일 이름과 확장자를 조작하기 위한 다른 유용한 기술이 있습니다. 그러한 방법 중 하나는 그리고 명령. 경로에서 파일 이름을 추출하는 데 사용할 수 있습니다. dirname 디렉토리 경로를 검색합니다. 이러한 명령을 매개변수 확장과 결합하면 파일 이름과 확장자를 효과적으로 분리할 수 있습니다. 예를 들어 파일 이름에서 확장자를 제거합니다. 이 접근 방식은 파일 이름뿐 아니라 전체 파일 경로로 작업할 때 특히 유용합니다.
또 다른 방법은 다음을 사용하는 것입니다. , 텍스트 필터링 및 변환을 위한 강력한 스트림 편집기입니다. 적절한 정규식을 작성하여 파일 이름과 확장자를 분리할 수 있습니다. 예를 들어 다음 명령은 파일 이름과 확장자를 분할하여 별도의 캡처 그룹에 배치합니다. 이 기술은 유연하며 복잡한 파일 이름 구조를 처리할 수 있습니다. 이러한 추가 도구와 방법을 탐색하면 Bash에서 파일 데이터를 조작하는 능력이 확장되어 다양한 스크립팅 시나리오에 대한 강력한 솔루션을 제공할 수 있습니다.
Bash 파일 조작에 대해 자주 묻는 질문
- 의 목적은 무엇입니까? 명령?
- 마지막 마침표 이후의 모든 항목을 제거하여 파일 이름에서 확장자를 제거합니다.
- 어떻게 명령 작업?
- 파일 이름의 마지막 마침표 이후의 모든 항목을 가져와 확장자를 추출합니다.
- 무엇을 제공된 스크립트에서 수행합니까?
- 필드 구분 기호를 마침표로 설정하여 파일 이름을 여러 부분으로 나눌 수 있습니다.
- 왜 사용합니까? 에 스크립트?
- 필드 수를 하나씩 줄여 파일 이름에서 확장자를 효과적으로 제거합니다.
- 파일 이름과 확장자를 추출하는 데 정규 표현식이 어떻게 도움이 됩니까?
- 패턴 일치 및 그룹화를 허용하여 파일 이름의 여러 부분을 분리할 수 있습니다.
- Bash에서 사용자 정의 함수를 사용하면 어떤 이점이 있나요?
- 사용자 정의 기능은 코드 재사용성과 가독성을 향상시켜 스크립트를 더욱 모듈화합니다.
- 어떻게 파일 이름에 대한 도움이 필요하세요?
- 전체 파일 경로에서 파일 이름을 추출하고 선택적으로 확장자를 제거합니다.
- 할 수 있다 파일 이름 조작에 사용됩니까?
- 예, 정규식을 사용하여 파일 이름의 일부를 변환하고 격리할 수 있습니다.
파일 이름 및 확장자 추출 솔루션 마무리
결론적으로, Bash에서 파일 이름과 확장자를 추출하는 것은 각기 다른 요구와 선호도에 적합한 다양한 방법을 통해 효과적으로 달성할 수 있습니다. 매개변수 확장, awk, sed 또는 사용자 정의 기능을 사용하든 이러한 기술은 유연하고 효율적인 솔루션을 제공합니다. 이러한 명령을 이해하고 활용하면 스크립트가 여러 마침표 및 기타 복잡한 파일 이름을 오류 없이 처리할 수 있습니다.