줄 끝의 grep 고정 문자열

줄 끝의 grep 고정 문자열

특수 문자가 포함된 문자열이 필요하며 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포함되지 않은 것으로 가정합니다 .\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"}

관련 정보