行末のgrep固定文字列

行末のgrep固定文字列

特殊文字を含む文字列が必要で、grepその文字列が行の末尾にあることを確認してください。

たとえば、リストでは次のようになります。

  • abc defg[h]ij
    grepが欲しいdefg[h]ij$

  • xyz 123*456
    grepしたい123*456$

特殊文字を含む検索文字列と可能な一致が異なるため、固定マスキングはできません。

grep -F私はラインアンカーの端と$組み合わせた同様のものを探しています。-w十分ではありません。行の終わりになるはずです。

答え1

1つの方法は、を呼び出す前にこれらの特殊文字をエスケープすることですgrep

そしてzsh

string='123*.$[]'
grep -e "${string//(#m)[[^.\\\$*]/\\$MATCH}\$" file

またはPOSIXとして:

escaped_string=$(printf '%s\n' "$string" | sed 's/[[^.\$*]/\\&/g')
grep -e "$escaped_string\$" file

または、GNUまたは次のように$string含まれていないとします。\Egreppcregrep

grep -Pe "\Q$string\E\$" file

または、awk次のように使用できます。

STRING="$string" awk 'BEGIN {s = ENVIRON["STRING"]; n = length(s)}
                      length >= n && substr($0, length - n + 1, n) == s'

またはperl:

STRING="$string" perl -ne 'print if /\Q$ENV{"STRING"}\E$/'

(今回はfind inが\Quoted文字列の終わりを表示しないperlことに注意してください)。\E$ENV{"STRING"}

関連情報