BASH:确定文件中三个字符串中的哪一个

时间:2015-07-07 22:01:05

标签: bash

我需要确定在文件中找到三个字符串中的哪一个。保证在文件中只找到三个中的一个。然后我想根据文件中的三个中的哪一个做一个不同的事情。

我目前正在尝试:

myfile="/home/directory/file.xml"
case "stringOne" in
    *$myfile*)
    #Do thing A
    ;;
esac
case "stringTwo" in
    *$myfile*)
    #Do thing B
    ;;
esac
case "stringThree" in
    *$myfile*)
    #Do thing C
    ;;
esac

然而,这不起作用,我的程序卡住了。有没有更好的方法,或者以这种方式快速解决这个问题?

2 个答案:

答案 0 :(得分:3)

由于保证文件中包含其中一个,您可以找到它是哪一个并使用case语句:

myfile="/home/directory/file.xml"
str=$(grep -o -m 1 -E 'stringOne|stringTwo|stringThree' $myfile)

[[ -z ${str} ]] && { echo "No match found!"; exit 1; }

case "${str}" in
    stringOne)
       #Do thing A
       ;;

    stringTwo)
       #Do thing B
       ;;

    stringThree)
       #Do thing C
       ;;

esac

grep选项:

  • -o只会打印匹配的字词。所以你知道输入文件中有哪个单词。
  • -m 1将确保它在第一场比赛时停止。所以它不需要扫描文件的其余部分。
  • -E用于匹配正则表达式,匹配三个字符串中的任何一个。

答案 1 :(得分:2)

您可以读取文件数据一次,然后检查每个字符串的存在:

data=$(</home/directory/file.xml)

if [[ $data == *stringOne* ]]; then
   echo "process stringOne"
elif [[ $data == *stringTwo* ]]; then
   echo "process stringTwo"
elif [[ $data == *stringThree* ]]; then
   echo "process stringThree"
fi