특수 문자가 포함된 문자열이 필요하며 grep
해당 문자열이 줄 끝에 있는지 확인하세요.
예를 들어 목록에서 다음과 같습니다.
abc defg[h]ij
grep을 원합니다defg[h]ij$
xyz 123*456
grep하고 싶어요123*456$
특수 문자가 포함된 검색 문자열과 가능한 일치 항목이 다양하므로 고정 마스킹이 불가능합니다.
grep -F
나는 라인 앵커의 끝과 $
결합된 비슷한 것을 찾고 있습니다 . -w
충분하지 않습니다. 라인의 끝이 되어야 합니다.
답변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"}