我需要确定在文件中找到三个字符串中的哪一个。可以保证在文件中只找到三个中的一个。然后我想做一个不同的事情,基于这三个文件中的哪个在文件中。
我正在尝试做:
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
但是,这不起作用,我的程序卡住了。有没有更好的方法,或者更快的方法来解决这个问题?
由于文件保证包含其中一个,因此您可以找到它是哪个并使用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
用于regex匹配,即匹配三个字符串中的任何一个。
您可以读取一次文件数据,然后检查每个字符串的存在:
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