Para una búsqueda de cadenas entre mayúsculas y minúsculas del valor de la variable needle
en el valor de la variable haystack
:
case "$haystack" in
*"$needle"*) echo "present";
*) echo "absent";
esac
Para una búsqueda de cadenas que no distingue entre mayúsculas y minúsculas, convierta ambas al mismo caso.
uc_needle=$(printf %s "$needle" | tr '[:lower:]' '[:upper:]' ; echo .); uc_needle=${uc_needle%.}
uc_haystack=$(printf %s "$haystack" | tr '[:lower:]' '[:upper:]' ; echo .); uc_haystack=${uc_haystack%.}
case "$uc_haystack" in
*"$uc_needle"*) echo "present";;
*) echo "absent";;
esac
Tenga tr
en cuenta que en GNU coreutils no admite configuraciones regionales multibyte (por ejemplo, UTF-8). Para hacer el trabajo con configuraciones regionales multibyte, use awk en su lugar. Si va a usar awk, puede hacer que haga la comparación de cadenas y no solo la conversión.
if awk 'BEGIN {exit !index(toupper(ARGV[2]), toupper(ARGV[1]))}' "$needle" "$haystack"; then
echo "present"
else
echo "absent"
fi
El tr
de BusyBox no admite la sintaxis; puedes usar en su lugar. BusyBox no admite configuraciones regionales que no sean ASCII.[:CLASS:]
tr a-z A-Z
En bash (pero no sh), versión 4.0+, hay una sintaxis incorporada para la conversión de mayúsculas y una sintaxis más simple para la coincidencia de cadenas.
if [[ "${haystack^^}" = *"${needle^^}"* ]]; then
echo "present"
else
echo "absent"
esac
grep -i
¿tal vez?