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