다음 패턴을 사용하여 문자열 var를 분할해 보세요.
TestString="Artical Title Here (ClassYear) [Author]"
다음과 같이 cut을 사용하여 제목을 Var에 넣을 수 있었습니다.
ATH="$(cut -d'(' -f1 <<<$TestString)"
echo $ATH
그러나 대괄호가 포함된 (ClassYear)를 다른 문자열 변수에 넣고 대괄호가 포함된 [Author]와 동일한 방법을 찾을 수 없습니다. 이러한 필드와 형식을 다른 2개 변수에 어떻게 넣을 수 있습니까?
답변1
매개변수를 사용한 확장 bash
:
# remove matching suffix ` (*`
ath="${TestString%% (*}"
# remove matching prefix `*) `
author="${TestString##*) }"
# remove matching prefix `*(`
classyear="${TestString##*(}"
# remove matching suffix ` [*` and add the missing `(`
classyear="(${classyear%% [*}"
답변2
수업 연도와 작성자를 얻으려면 grep을 사용할 수 있습니다. 또한 매개변수 확장을 사용하여 제목을 얻을 수 있습니다.
ath=${TestString/(*)*}
year=$(grep -o '(.*)' <<<"$TestString")
auth=$(grep -o '\[.*\]' <<<"$TestString")
이는 제목이안 돼요안에 괄호나 대괄호가 있으면 연도는 다음과 같습니다.언제나괄호 안에 저자는언제나괄호 안에 넣습니다.
이것은 .
"모든 단일 문자"와 일치하는 정규식 태그로, *
0번에서 무한번 일치하도록 추가합니다. 따라서 괄호 안의 내용과 일치해야 합니다. 범위를 좁히고 싶고 수업 연도가 항상 가능한 숫자인 경우에도 '([0-9]+)'
이는 여전히 광범위한 솔루션이며 입력에 대한 더 많은 정보를 통해 범위를 더욱 좁힐 수 있습니다.
괄호는 정규식에서 문자 클래스를 생성하므로 이스케이프 처리해야 하며 문자 그대로 일치시키려고 합니다.