特殊文字を含む文字列が必要で、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
含まれていないとします。\E
grep
pcregrep
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"}