![grep이 바이트 이스케이프를 이해하도록 합니다.](https://linux55.com/image/129359/grep%EC%9D%B4%20%EB%B0%94%EC%9D%B4%ED%8A%B8%20%EC%9D%B4%EC%8A%A4%EC%BC%80%EC%9D%B4%ED%94%84%EB%A5%BC%20%EC%9D%B4%ED%95%B4%ED%95%98%EB%8F%84%EB%A1%9D%20%ED%95%A9%EB%8B%88%EB%8B%A4..png)
일부 UTF-8 문자를 일치시키려고 합니다. 문제는 바이트 이스케이프가 grep
변환되지 않아 \x
실패한다는 것입니다.
echo -e '\xd8\xaa' | grep -P '\xd8\xaa'
이것이 성공하면:
echo -e '\xd8\xaa' | grep -P $(printf '\xd8\xaa')
printf를 사용하지 않고 grep이 바이트 이스케이프를 직접 이해할 수 있습니까? 어떻게?
답변1
실패합니다.
$ echo -e '\xd8\xaa' | grep -P '\xd8\xaa' | hexdump
이것은 효과가 있었습니다:
$ echo -e '\xd8\xaa' | grep -P $'\xd8\xaa' | hexdump
0000000 aad8 000a
0000003
문서
에서 man bash
:
$'string' 형식의 단어는 특별하게 처리됩니다. 단어는 ANSI C 표준에 지정된 대로 대체된 백슬래시 이스케이프 문자를 사용하여 문자열로 확장됩니다. 백슬래시 이스케이프 시퀀스가 있는 경우 다음과 같이 디코딩됩니다.
\a alert (bell) \b backspace \e \E an escape character \f form feed \n new line \r carriage return \t horizontal tab \v vertical tab \\ backslash \' single quote \" double quote \? question mark \nnn the eight-bit character whose value is the octal value nnn (one to three digits) \xHH the eight-bit character whose value is the hexadecimal value HH (one or two hex digits) \uHHHH the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value HHHH (one to four hex digits) \UHHHHHHHH the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value HHHHHHHH (one to eight hex digits) \cx a control-x character
확장 결과는 달러 기호가 없는 것처럼 작은따옴표로 묶입니다.