diff --git a/util/grub-mkconfig_lib.in b/util/grub-mkconfig_lib.in
index 60b31ca..eabe2e7 100644
--- a/util/grub-mkconfig_lib.in
+++ b/util/grub-mkconfig_lib.in
@@ -229,7 +229,7 @@ version_test_numeric ()
     version_test_numeric_a="$version_test_numeric_b"
     version_test_numeric_b="$version_test_numeric_c"
   fi
-  if (echo "$version_test_numeric_a" ; echo "$version_test_numeric_b") | version_sort | head -n 1 | grep -qx "$version_test_numeric_b" ; then
+  if (echo "$version_test_numeric_a" ; echo "$version_test_numeric_b") | version_sort | head -n 1 | grep -qE "^$version_test_numeric_b$" ; then
     return 0
   else
     return 1
diff --git a/util/grub.d/10_kfreebsd.in b/util/grub.d/10_kfreebsd.in
index 9d8e8fd..830cc7c 100644
--- a/util/grub.d/10_kfreebsd.in
+++ b/util/grub.d/10_kfreebsd.in
@@ -231,7 +231,7 @@ while [ "x$list" != "x" ] ; do
     kfreebsd_entry "${OS}" "${version}" recovery "-s"
   fi
 
-  list=`echo $list | tr ' ' '\n' | fgrep -vx "$kfreebsd" | tr '\n' ' '`
+  list=`echo $list | tr ' ' '\n' | fgrep -vE "^$kfreebsd$" | tr '\n' ' '`
 done
 
 # If at least one kernel was found, then we need to
diff --git a/util/grub.d/10_linux.in b/util/grub.d/10_linux.in
index de9044c..f0861fc 100644
--- a/util/grub.d/10_linux.in
+++ b/util/grub.d/10_linux.in
@@ -104,8 +104,8 @@ linux_entry ()
   # FIXME: We need an interface to select vesafb in case efifb can't be used.
   if [ "x$GRUB_GFXPAYLOAD_LINUX" = x ]; then
       echo "	load_video" | sed "s/^/$submenu_indentation/"
-      if grep -qx "CONFIG_FB_EFI=y" "${config}" 2> /dev/null \
-	  && grep -qx "CONFIG_VT_HW_CONSOLE_BINDING=y" "${config}" 2> /dev/null; then
+      if grep -qE "^CONFIG_FB_EFI=y$" "${config}" 2> /dev/null \
+	  && grep -qE "^CONFIG_VT_HW_CONSOLE_BINDING=y$" "${config}" 2> /dev/null; then
 	  echo "	set gfxpayload=keep" | sed "s/^/$submenu_indentation/"
       fi
   else
@@ -245,7 +245,7 @@ while [ "x$list" != "x" ] ; do
                 "single ${GRUB_CMDLINE_LINUX}"
   fi
 
-  list=`echo $list | tr ' ' '\n' | fgrep -vx "$linux" | tr '\n' ' '`
+  list=`echo $list | tr ' ' '\n' | fgrep -vE "^$linux$" | tr '\n' ' '`
 done
 
 # If at least one kernel was found, then we need to
diff --git a/util/grub.d/20_linux_xen.in b/util/grub.d/20_linux_xen.in
index c48af94..c5ffed3 100644
--- a/util/grub.d/20_linux_xen.in
+++ b/util/grub.d/20_linux_xen.in
@@ -152,7 +152,7 @@ for i in /boot/vmlinu[xz]-* /vmlinu[xz]-* /boot/kernel-*; do
 		break
 	    fi
 	done
-        if (grep -qx "CONFIG_XEN_DOM0=y" "${config}" 2> /dev/null || grep -qx "CONFIG_XEN_PRIVILEGED_GUEST=y" "${config}" 2> /dev/null); then linux_list="$linux_list $i" ; fi
+        if (grep -qE "^CONFIG_XEN_DOM0=y$" "${config}" 2> /dev/null || grep -qE "^CONFIG_XEN_PRIVILEGED_GUEST=y$" "${config}" 2> /dev/null); then linux_list="$linux_list $i" ; fi
     fi
 done
 if [ "x${linux_list}" = "x" ] ; then
@@ -259,12 +259,12 @@ while [ "x${xen_list}" != "x" ] ; do
 		"single ${GRUB_CMDLINE_LINUX}" "${GRUB_CMDLINE_XEN}"
 	fi
 
-	list=`echo $list | tr ' ' '\n' | fgrep -vx "$linux" | tr '\n' ' '`
+	list=`echo $list | tr ' ' '\n' | fgrep -vE "^$linux$" | tr '\n' ' '`
     done
     if [ x"$is_top_level" != xtrue ]; then
 	echo '	}'
     fi
-    xen_list=`echo $xen_list | tr ' ' '\n' | fgrep -vx "$current_xen" | tr '\n' ' '`
+    xen_list=`echo $xen_list | tr ' ' '\n' | fgrep -vE "^$current_xen$" | tr '\n' ' '`
 done
 
 # If at least one kernel was found, then we need to
-- 
2.7.4

