grep string fixa no final da linha

3

Eu preciso de grep para string contendo caracteres especiais e verifique se ela está no final da linha

Por exemplo, na lista:

  • abc defg [h] ij
    Eu quero grep para defg[h]ij$

  • xyz 123 * 456
    Eu quero grep para 123*456$

A string de pesquisa e a possível correspondência contendo caracteres especiais estão variando, portanto, um mascaramento fixo não é possível.

Eu estou procurando por algo como grep -F em combinação com o fim da linha $ anchor. -w não será suficiente, deve ser o fim da linha.

    
por PeterK 27.11.2014 / 21:56

1 resposta

4

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).

    
por 27.11.2014 / 22:38