![다른 파일 이름에서 파일 이름 추출](https://linux55.com/image/9270/%EB%8B%A4%EB%A5%B8%20%ED%8C%8C%EC%9D%BC%20%EC%9D%B4%EB%A6%84%EC%97%90%EC%84%9C%20%ED%8C%8C%EC%9D%BC%20%EC%9D%B4%EB%A6%84%20%EC%B6%94%EC%B6%9C.png)
다양한 파일에 대한 알림 파일을 받습니다. 다른 프로세스에서 사용하기 위해 이러한 알림 파일에서 파일 이름을 추출하고 싶습니다. 알림 파일의 처음 4개 문자열은 항상 무시됩니다. 따라서 파일 이름은 위치 5에서 시작하고 모든 문자로 시작할 수 있으며 .로 끝날 수 있습니다 .csv
.
한 가지 예:
NotificationFile = 'NFT_PPF_STANDARD_1720156B_NBIRNans_DFT_TILT_EOF_FFP_20160619-10.csv_16062000352520'
NotificationFile = 'NFT_PPF_IMPULSE_172555A_Acc_Account_FFP_20160619-10.csv_16062000352520'
NotificationFile = 'NFT_PPF_IMPULSE_172555A_CRI_Position_FFP_20160619-10.csv_16062000352520'
파일 이름은 다음과 같습니다:
Filename = 'NBIRNans_DFT_TILT_EOF_FFP_20160619-10.csv'
Filename = 'Acc_Account_FFP_20160619-10.csv'
Filename = 'CRI_Position_FFP_20160619-10.csv'
다음 명령을 사용하여 알림 파일 이름에서 파일 이름을 추출했지만 파일 이름에 "_"가 3개만 포함된 경우에만 작동합니다.
Extract = echo $NotificationFile | cut -d "_" -f5-8
# $NotificationFile is the NotificationFile above
# Extract should be equal to Filename
모든 파일 이름 길이에 사용할 수 있는 일반 명령은 무엇입니까?
답변1
원하는 대로 사용할 수 있습니다 sed
.
sed -ne 's/.*\(NB.*\)\_.*$/\FILENAME = \1 /p'
답변2
모든 파일 이름이 로 끝나고 .csv
어디에도 다른 파일 이름이 포함되어 있지 않은 경우 .csv
예를 들어 다음을 사용하세요. sed
나중에 모든 것을 삭제하십시오.
Extract=$(echo $NotificationFile | sed 's/\.csv.*/.csv/')
이것을 이전 콘텐츠와 결합하세요.
Extract=$(echo $NotificationFile | sed 's/\.csv_.*/.csv/' | cut -d "_" -f5-)
범위는 N-
"줄 끝까지"를 의미합니다. _
파일명에 정확히 3이 없으면 8번째에서 멈추지 않습니다 .
답변3
문자열 조작 구조 사용매개변수 확장.
filename="${NotificationFile#????}"
filename="${filename%.csv*}.csv"
첫 번째 줄은 처음 4자가 제거된 filename
값으로 설정됩니다. NotificationFile
두 번째 줄은 filename
처음부터 모든 것을 삭제 .csv
하고 다시 추가하여 .csv
보상합니다.