始めと終わりを確認してください。

始めと終わりを確認してください。

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

おすすめ記事