我需要确定在文件中找到三个字符串中的哪一个。保证在文件中只找到三个中的一个。然后我想根据文件中的三个中的哪一个做一个不同的事情。
我目前正在尝试:
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
然而,这不起作用,我的程序卡住了。有没有更好的方法,或者以这种方式快速解决这个问题?
答案 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