Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 将变量中的字符串与另一个变量中的字符串精确匹配_Regex_Linux_String_Bash_Shell - Fatal编程技术网

Regex 将变量中的字符串与另一个变量中的字符串精确匹配

Regex 将变量中的字符串与另一个变量中的字符串精确匹配,regex,linux,string,bash,shell,Regex,Linux,String,Bash,Shell,我有一个句子,它只是一个字符串变量,单词之间用空格隔开 我有另一个变量,它包含一个单词。我想要的是在包含句子的变量中找到单词的精确匹配。我试过这个: read -p "enter the word to match " STR # STR contains VVDNSG #this DUP_SG_NAME_PUBLIC variable contains a string which consists of few words DUP_SG_NAME_PUBLIC=$(aws ec2 de

我有一个句子,它只是一个字符串变量,单词之间用空格隔开

我有另一个变量,它包含一个单词。我想要的是在包含句子的变量中找到单词的精确匹配。我试过这个:

read -p "enter the word to match " STR # STR contains VVDNSG 

#this DUP_SG_NAME_PUBLIC variable contains a string which consists of few words 
DUP_SG_NAME_PUBLIC=$(aws ec2 describe-security-groups \
  --query 'SecurityGroups[*].{GroupName:GroupName}' \
  --output text) 

if [[ $DUP_SG_NAME_PUBLIC =~ $STR ]]
then 
echo "true"
else 
echo "false"
fi
问题 在这里,我提供了“VVDN”作为字符串,但我必须匹配“VVDNSG”,但这段代码适用于这两种情况。即使是VVDN和VVDNSG,这也是可以理解的

我想做什么
我想找到精确的匹配,如果给定VVDNSG作为STR值,它应该打印true或false,即使使用VVDN,我希望它与变量而不是文字字符串进行比较


我用谷歌搜索了几个例子,大多数例子要么告诉你在文件中查找匹配项,要么硬编码字符串比较。

你的
STR
作为正则表达式工作。因此,要将其用作精确匹配,请显式标记开头为
^
,结尾为
$

STR="^VVDN$"
然后,
if
条件将仅对
DUP\u SG\u NAME\u PUBLIC
中的
STR
的精确匹配为真

更新: 事实上,我认为你想要的有些不同——你有一个句子,包含由空格分隔的单词(你没有提到终止字符),你想要匹配其中一个单词,只要它是完全匹配的。让我们假设,如果单词后面有空格,或者它在句子的末尾,那么它将是一个完全匹配的词

在这种情况下,您的正则表达式可以是:

STR="VVDN($| )"

这就是你的意思吗?

你的
STR
用作正则表达式。因此,要将其用作精确匹配,请显式标记开头为
^
,结尾为
$

STR="^VVDN$"
然后,
if
条件将仅对
DUP\u SG\u NAME\u PUBLIC
中的
STR
的精确匹配为真

更新: 事实上,我认为你想要的有些不同——你有一个句子,包含由空格分隔的单词(你没有提到终止字符),你想要匹配其中一个单词,只要它是完全匹配的。让我们假设,如果单词后面有空格,或者它在句子的末尾,那么它将是一个完全匹配的词

在这种情况下,您的正则表达式可以是:

STR="VVDN($| )"

这就是你的意思吗?

看起来像一个
案例
,第一个完全匹配,第二个通配符匹配可能是你想要的。看起来像一个
案例
,第一个完全匹配,第二个通配符匹配可能是你想要的。是的,我有一个包含存储在变量中的单词的句子,我只想匹配其中一个单词,如果它是完全匹配的话。让我检查一下您的解决方案。问题是我从用户那里获取输入,并将其存储在STR变量中。我知道,^和$标记开始和结束,但前提是我可以在用户输入中使用它们。我已经编辑了这个问题。我对awk和sed有点粗略,我不知道这些工具是否可以在这里工作。存储用户输入后,您可以随时向其添加一些内容。例如,您可以执行
STR=“${STR}($|”)”
。如果您希望将精确匹配扩展到整个单词,这意味着匹配可能发生在句子开头或匹配前有空格时,您可以将其更改为
STR=“(^|)${STR}($|”)”
。是的,您是对的,我有一个包含存储在变量中的单词的句子,我只想匹配其中一个单词,如果它是完全匹配的话。让我检查一下您的解决方案。问题是我从用户那里获取输入,并将其存储在STR变量中。我知道,^和$标记开始和结束,但前提是我可以在用户输入中使用它们。我已经编辑了这个问题。我对awk和sed有点粗略,我不知道这些工具是否可以在这里工作。存储用户输入后,您可以随时向其添加一些内容。例如,您可以执行
STR=“${STR}($|”)”
。如果要将精确匹配扩展到整个单词,这意味着匹配可能发生在句子的开头或匹配前有空格时,可以将其更改为
STR=“(^|)${STR}($|”)”