![Perl의 메타 인용문과 같은 egrep의 메타 문자를 이스케이프 처리하는 방법은 무엇입니까?](https://linux55.com/image/77224/Perl%EC%9D%98%20%EB%A9%94%ED%83%80%20%EC%9D%B8%EC%9A%A9%EB%AC%B8%EA%B3%BC%20%EA%B0%99%EC%9D%80%20egrep%EC%9D%98%20%EB%A9%94%ED%83%80%20%EB%AC%B8%EC%9E%90%EB%A5%BC%20%EC%9D%B4%EC%8A%A4%EC%BC%80%EC%9D%B4%ED%94%84%20%EC%B2%98%EB%A6%AC%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
metaquote()
Perl에는 정규식에서 모든 특수 문자를 이스케이프하는 기능이 있습니다 .
이에 상응하는 기술이 있나요 egrep
?
예: 문자열을 검색하는 경우 abc.def.ghi
수동 이스케이프 지점을 기억해야 합니다.abc\.def\.ghi
egrep
나는 이것을 수행하기 위한 내장된 모드/함수가 없다고 가정하고 있지만 Perl/sed/awk에서 "one-liners"를 사용하여 이를 metaquote()
에뮬레이트 할 수도 있습니다. 또한 Perl egrep
은 간단한 경우에 작동할 수 있지만 metaquote()
정규식 사이 수식 구문이 다릅니다.egrep
perl
답변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
정규식으로 원시 문자열을 사용하므로 일치하기를 원합니다.
$ echo "foo bar abc-def-ghi baz" | grep "$str" foo bar abc-def-ghi baz
이스케이프된 문자열을 사용하기 때문에 이것이 일치할 것으로 예상하지 않습니다.
$ echo "foo bar abc-def-ghi baz" | grep "$escaped" $ echo $? 1
이스케이프된 문자열을 사용하기 때문에 일치시키길 원합니다.
$ echo "foo bar abc.def.ghi baz" | grep "$escaped" foo bar abc.def.ghi baz