将字符串拆分为字符串和整数bash

时间:2017-02-11 05:45:48

标签: bash parsing

我需要在这种格式的文本文件中用足球圆形结果编写足球联赛表

abc 4 def 5 ghi 9 hef 10

格式为

[home team][home team points][guest team][guest team points]

该程序将接受五个团队并有多个文本文件可供阅读。我不知道的是如何获得每个相应团队的积分。我在这个站点中看到了解析字符串的一些解决方案,其中包含一个空格和分隔符。但是,我需要像abc 4 def 5这样阅读。有什么解决方案吗?

以下是此时的代码。我只想弄清楚如何阅读团队的对应分数。谢谢你的帮助。

if [ $# -eq 0 ]; then
   echo "No argument"
else
   echo "The number of arguments : $#" 
   echo "The full list : $@"
   myArray=("$@")
   echo "${myArray[0]}"
   arraylength=${#myArray[@]}
   declare -p myArray
   #loop for places entered
   for ((i=0;i<${arraylength};i++)); 
   do 
    #iterate on the files stored to find target
    for matchfile in match*.txt;
        do  
        declare file_content=$( cat "${matchfile}" )
        #check whether a file has target lanaguage
        if [[ " $file_content " =~ ${myArray[i]} ]] # please note the space before and after the file content
            then  
              #awk -v a="$file_content" -v b="${myArray[i]}" 'BEGIN{print index(a,b)}'
              #echo "${myArray[i]}" 
              #let j=j+1
         echo "${myArray[i]} found in ${matchfile}: with a score ..."

                    fi
        done
    done
    fi
exit  

1 个答案:

答案 0 :(得分:1)

由于您已经与正则表达式匹配:

UIImage

您可以这样调整:

if [[ " $file_content " =~ ${myArray[i]} ]]; then

re="(^| )${myArray[i]} ([0-9]*)( |$)" if [[ $file_content =~ $re ]]; then (^| )部分确保在团队名称后面有空格或文件的开头或结尾时有效。 ( |$)部分是将分数捕获到&#34;捕获组&#34;。

运行该正则表达式匹配将使用比较中的所有匹配项填充数组([0-9]*),因此BASH_REMATCH将获得分数。