我有由起始部分定义的文件,这些部分由oy TITLE,SUBTITLE组成,后面是逗号分隔的KEYWORD。
## TITLE [SUBTITLE] KEYWORD,KEYWORD 结束使用
## END OF TITLE [SUBTITLE]我希望确保文件包含定义的相应结束部分。
我如何做一个测试,以检查文件的事情,应该是什么。我需要在巴什考试。
## 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]发布于 2023-02-08 03:15:02
关键字的完整列表将被捕获到一个变量中。然后将逗号分隔的列表读入数组中。
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: keyword4https://unix.stackexchange.com/questions/734050
复制相似问题