Bash - 从变量词中删除特定字符

时间:2014-12-10 08:25:10

标签: regex bash variables

我写了一个文本文件,其中我描述了如下参数:

status.u16OK=0x00
status.u16NOK=0x01
status.u16NOTDEFINED=0x02

以下功能必须返回状态。

function identifyStatus()
{
    while read lines                    
    do  
        input=${lines%=*}               
        firstTerm=${input%.*}           
        ID=${lines##*=}

        if [ $firstTerm == "status" ] && [ $((ID)) == $2 ];then
            secondTerm=${input#*.} 
            echo "status : $secondTerm"
        fi
    done < $1
}

我想检索状态:确定而不是状态:u16OK

3 个答案:

答案 0 :(得分:2)

您可能会考虑使用IFS来简化代码。

$IFS - internal field separator

以下是代码:

#!/usr/bin/env bash

IFS=".="
while read status id value x
do
  if [ "$status" == "status" ] && [ "$value" == $2 ];then
      echo "Status ${id:3}"
  fi
done < $1

答案 1 :(得分:1)

您可以使用${string:position}$string

提取$position的子字符串
~$ secondTerm="u16NOTDEFINED"
~$ echo ${secondTerm:3}
NOTDEFINED

您还可以使用${string:position}指定长度:

~$ input="status.u16NOTDEFINED"
~$ echo ${input:7:3}
u16

答案 2 :(得分:0)

修改行:

secondTerm=${input#*.}

到:

secondTerm=${input#*.u16}  

:)