Uma abordagem é a de escapar desses caracteres especiais antes de chamar grep
.
com zsh
:
string='123*.$[]'
grep -e "${string//(#m)[[^.\\$*]/\$MATCH}\$" file
ou POSIXly:
escaped_string=$(printf '%s\n' "$string" | sed 's/[[^.\$*]/\&/g')
grep -e "$escaped_string\$" file
ou supondo que $string
não contenha \E
, com GNU grep
ou pcregrep
:
grep -Pe "\Q$string\E\$" file
ou você pode usar awk
como:
STRING="$string" awk 'BEGIN {s = ENVIRON["STRING"]; n = length(s)}
length >= n && substr($0, length - n + 1, n) == s'
ou perl
:
STRING="$string" perl -ne 'print if /\Q$ENV{"STRING"}\E$/'
(dessa vez, perl
sabe que \E
encontrado em $ENV{"STRING"}
não marca o fim da string \ Quoted).