使用 grep 查找包含路径的两个字符串变量之间的子字符串

使用 grep 查找包含路径的两个字符串变量之间的子字符串

我只是想使用字符串变量确认一个路径存在于另一个路径中。

我的脚本:

#!/bin/bash

HAYSTACK="/cygdrive/d/var/www/html/adm4"
NEEDLE="/cygdrive/d/var/www/html"

# first try
#grep -q "$NEEDLE" "$HAYSTACK"

#second try
grep -q "${NEEDLE}" "${HAYSTACK}"

if [ $? -eq 0 ] ; then
    echo  "Your string has been found"
else
    echo "Your string has not been found"
fi

结果:

me@localhost ~]$ ./testbash
grep: : No such file or directory
Your string has not been found

我怀疑因为这些是路径,所以我需要做更多的事情。

答案1

Grep 需要该格式的命令grep [options] PATTERN [FILE...],因此将第二个字符串视为要扫描的文件。如果只是一行,您可以将其发送到 stdin 上。

echo $haystack | grep $needle

或者您喜欢的方式。也许这里有一个字符串:

grep $needle <<< $haystack

答案2

==使用表单时,Bash 具有与比较运算符的内置模式匹配[[ ]],因此您可以执行以下操作以避免完全调用 grep:

if [[ $HAYSTACK == *${NEEDLE}* ]] ; then
    echo "Your string has been found"
else
    echo "Your string has not been found"
fi

如果需要执行更复杂的匹配,Bash 还支持正则表达式与=~运算符的匹配。

相关内容