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