grepにバイトエスケープを理解させる。

grepにバイトエスケープを理解させる。

いくつかの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

拡張結果は、ドル記号がないかのように単一引用符で囲まれます。

おすすめ記事