TITLE
내 파일에는 oy 와 SUBTITLE
쉼표 구분 기호가 포함된 시작 섹션으로 정의된 섹션이 포함되어 있습니다 KEYWORD
.
## TITLE [SUBTITLE] KEYWORD,KEYWORD
엔딩은 다음을 사용하여 완성됩니다.
## END OF TITLE [SUBTITLE]
파일에 정의의 해당 끝이 포함되어 있는지 확인하고 싶습니다.
파일에 필요한 내용이 있는지 확인하기 위해 테스트를 실행하려면 어떻게 해야 합니까? Bash에서 이것을 테스트해야합니다.
## FAML [ASMB] keyword,keyword
## Some text
## Description
## END OF FAML [ASMB]
Some Code
## More text
## FALUN [GONG] keyword,keyword
## Some text
## Description
## END OF FALUN [GONG]
More Text
아래부터 해당 부분의 실제 문자열을 캡쳐합니다.
while read line; do
if [[ $line =~ ^##\ ([A-Z]+)\ \[([A-Z]+)\]\ (.*),(.*)$ ]]; then
title=${BASH_REMATCH[1]}
subtitle=${BASH_REMATCH[2]}
keywords=${BASH_REMATCH[3]}
keywords2=${BASH_REMATCH[4]}
echo "Title: $title"
echo "Subtitle: $subtitle"
echo "Keywords: $keywords, $keywords2"
fi
done < input.txt
다음 코드를 실행해 보았으나 print가 키워드가 아니고 배열 인쇄가 발생하지 않습니다.
## DN [AMBIT] bash,resource
## hodeuiihoedu
## AVAL:
## + ooeueocu
## END OF DN [AMBIT]
답변1
원하는 수의 키워드를 읽으려면 정규식을 변경하여 텍스트 뒤에 선택적 쉼표가 오는 패턴을 찾으세요. 키워드의 전체 목록은 단일 변수로 캡처됩니다. 그런 다음 쉼표로 구분된 목록을 배열로 읽어옵니다.
while read -r line; do
if [[ $line =~ ^##\ ([A-Z]+)\ \[([A-Z]+)\]\ (.*[,]?)$ ]]; then
title="${BASH_REMATCH[1]}"
subtitle="${BASH_REMATCH[2]}"
echo "Title: $title"
echo "Subtitle: $subtitle"
# read keyword list into array
IFS=',' read -ra keywords <<< "${BASH_REMATCH[3]}"
i=0
for kw in "${keywords[@]}"; do
echo "Keyword$((i+=1)): $kw"
done
echo
fi
done << EOF
## FAML [ASMB] keyword1,keyword2
## Some text
## Description
## END OF FAML [ASMB]
Some Code
## More text
## FALUN [GONG] keyword1,keyword2,keyword3,keyword4
## Some text
## Description
## END OF FALUN [GONG]
EOF
산출:
Title: FAML
Subtitle: ASMB
Keyword1: keyword1
Keyword2: keyword2
Title: FALUN
Subtitle: GONG
Keyword1: keyword1
Keyword2: keyword2
Keyword3: keyword3
Keyword4: keyword4