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

但是,这不起作用,我的程序卡住了。有没有更好的方法,或者更快的方法来解决这个问题?

由于文件保证包含其中一个,因此您可以找到它是哪个并使用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

最新更新