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

BASH:确定文件中的三个字符串中的哪一个,bash,Bash,我需要确定在文件中找到三个字符串中的哪一个。可以保证在文件中只找到三者中的一个。然后,我想根据文件中三个选项中的哪一个做一件不同的事情 我目前正在尝试: myfile="/home/directory/file.xml" case "stringOne" in *$myfile*) #Do thing A ;; esac case "stringTwo" in *$myfile*) #Do thing B ;; esac case "stringT

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

我目前正在尝试:

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

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

由于文件保证包含其中的一个,您可以找到它是哪一个以及use
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
    将只打印匹配的单词。因此,您知道输入文件中有哪个单词
  • -m1
    将确保它在第一次匹配时停止。因此,它不需要扫描文件的其余部分
  • -E
    表示正则表达式匹配,即匹配三个字符串中的任意一个
由于该文件保证包含其中一个,因此您可以找到它是哪一个以及use
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
    将只打印匹配的单词。因此,您知道输入文件中有哪个单词
  • -m1
    将确保它在第一次匹配时停止。因此,它不需要扫描文件的其余部分
  • -E
    表示正则表达式匹配,即匹配三个字符串中的任意一个
您可以读取文件数据一次,然后检查每个字符串是否存在:

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

data=$(您可以读取文件数据一次,然后检查每个字符串是否存在:

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

data=$(你能使用
grep
命令吗?听起来你想做
if-stringOne在文件中;然后做事情A;elif-stringTwo在文件中;然后做事情B;elif-stringThree在文件中;然后做事情C;fi
。是这样吗?(如果是,这是if/then/elif语法的开始,我怀疑你会想要的。)@蓝色如果我使用它,我会得到文件所在的行-我不关心这一点,因为我只想知道行是否在文件中-或者如果字符串不在文件中,则根本没有输出。我不确定使用
grep
会有什么帮助。此外,您还想了解
grep
-s
选项及其退出status.@steve你能告诉我放在一起会是什么样子吗?我不完全确定使用
case
vs
if
是不是有问题。你能使用
grep
命令吗?所以听起来你想做
如果文件中有stringOne,那么做A;如果文件中有stringTwo,那么做B;如果文件中有stringTwo,那么做C;fi
。是这样吗?(如果是这样,我想这是If/then/elif语法的开头。)@蓝色如果我使用它,我会得到文件所在的行-我不关心这一点,因为我只想知道行是否在文件中-或者如果字符串不在文件中,则根本没有输出。我不确定使用
grep
会有什么帮助。此外,您还想了解
grep
-s
选项及其退出status.@steve你能告诉我放在一起会是什么样子吗?我不完全确定使用
case
vs
是否有问题,你能解释一下
str=$(grep…
行在做什么吗?你能解释一下
str=$(grep…
行在做什么吗?