确保开始和结束部分

确保开始和结束部分

我的文件包含由起始部分定义的部分,其中包含 oy TITLE, 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

尝试运行以下代码,但打印不是关键字,数组打印没有发生。

  ## 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

相关内容