백슬래시로 시작하거나 시작하는 문자열을 찾고 바꾸는 정규식

백슬래시로 시작하거나 시작하는 문자열을 찾고 바꾸는 정규식

내 음악 라이브러리에 다음 형식의 노래 제목이 포함된 편집 앨범이 있는데 슬래시로 인해 이러한 파일을 만들기 ARTIST/ TITLE가 어렵습니다 . 그래서 저는 이 파일들의 이름을 변경하여 관리하기 쉽게 만들고 싶었습니다 (또한 내 음악 라이브러리의 나머지 이름과 일관되게 이름을 지정하고 싶었습니다). 이것이 내가 지금까지 가지고 있는 것입니다:cpmvTitle (Artist)

#! /bin/bash

for i in ./*.flac; do
TITLE=`ls "$i" | sed #display string after backslash`
ARTIST=`ls "$i" | sed #display string before backslash`

mv ./"$i" ./"$TITLE ($ARTIST)"

done

또한 슬래시 뒤에 공백이 있어서 상황이 ARTIST/ TITLE엉망이 될 수도 있다는 점을 기억하세요.

답변1

귀하의 질문은 다음과 같습니다.

문자열을 포함하는 bash 변수가 있습니다. 문자열 앞과 뒤의 두 부분으로 나누고 싶습니다 "/ ".

그렇다면 간단한 bash 솔루션은 다음과 같습니다.

track="Judy Garland/ Somewhere Over the Rainbow"
title="${track#*/ }"
artist="${track%%/ *}"

문법은 #"...와 일치하는 가장 짧은 접두사가 없습니다"를 의미합니다. 문법은 %%"일치하는 가장 긴 접미사가 없습니다..."를 의미합니다. (마찬가지로 ##접두사는 가장 길고 접미사는 가장 짧아야 합니다 %.) 패턴은 일반 bash glob( shopt -s extglob또는 유효한 경우 확장 bash glob)입니다. 이것은아니요정규식.

패턴이 일치하지 않으면 문자열은 수정되지 않은 상태로 반환되며 특히 슬래시 뒤에 공백이 있는지 확실하지 않은 경우 해당 조건을 확인해야 합니다.


그런데 왜 을 사용합니까 ls "$i"? 물론 이는 또는 "here-string"을 $i사용할 수도 있는 값과 다르지 않습니다.echo

sed '# some sed magic' <<<"$i"

관련 정보