Perl의 메타 인용문과 같은 egrep의 메타 문자를 이스케이프 처리하는 방법은 무엇입니까?

Perl의 메타 인용문과 같은 egrep의 메타 문자를 이스케이프 처리하는 방법은 무엇입니까?

metaquote()Perl에는 정규식에서 모든 특수 문자를 이스케이프하는 기능이 있습니다 .

이에 상응하는 기술이 있나요 egrep?

예: 문자열을 검색하는 경우 abc.def.ghi수동 이스케이프 지점을 기억해야 합니다.abc\.def\.ghi

egrep나는 이것을 수행하기 위한 내장된 모드/함수가 없다고 가정하고 있지만 Perl/sed/awk에서 "one-liners"를 사용하여 이를 metaquote()에뮬레이트 할 수도 있습니다. 또한 Perl egrep은 간단한 경우에 작동할 수 있지만 metaquote()정규식 사이 수식 구문이 다릅니다.egrepperl

답변1

패턴을 고정 문자열로 -F처리하려면 옵션을 사용하십시오 .grep

grep -F 'abc.def.ghi' <file

또한 에 전화할 필요가 없다는 점에 유의하세요 egrep.

답변2

직접 해야 합니다. 이 sed 명령은 영숫자가 아닌 문자를 이스케이프합니다. 즉, quotemeta(IIRC)

str="abc.def.ghi"
escaped=$(sed 's/[^[:alnum:]]/\\&/g' <<< "$str")

echo "$escaped"    # => abc\.def\.ghi
  1. 정규식으로 원시 문자열을 사용하므로 일치하기를 원합니다.

    $ echo "foo bar abc-def-ghi baz" | grep "$str"
    foo bar abc-def-ghi baz
    
  2. 이스케이프된 문자열을 사용하기 때문에 이것이 일치할 것으로 예상하지 않습니다.

    $ echo "foo bar abc-def-ghi baz" | grep "$escaped"
    $ echo $?
    1
    
  3. 이스케이프된 문자열을 사용하기 때문에 일치시키길 원합니다.

    $ echo "foo bar abc.def.ghi baz" | grep "$escaped"
    foo bar abc.def.ghi baz
    

관련 정보