Regex 匹配非ascii字符而不重复使用外部二进制文件

Regex 匹配非ascii字符而不重复使用外部二进制文件,regex,linux,bash,non-ascii-characters,Regex,Linux,Bash,Non Ascii Characters,假设我在grep中有以下正则表达式: grep -E 'head \x1E tail' 我可以使用它的个人转义码,\x使grep意识到非ascii字符 我可以在不调用任何外部程序的情况下对Bash执行同样的操作吗? Bash为匹配正则表达式提供了3种模式: 普通路径名扩展 extglob路径名扩展 [[string=~regex]] 所有这些似乎都不支持UTF转义码,也不支持Bash本身。在Bash中,您可以使用带引号的ANSI字符串: $ x=éclair $ [[ $x =~ $'\xc3

假设我在
grep
中有以下正则表达式:

grep -E 'head \x1E tail'
我可以使用它的个人转义码,
\x
使
grep
意识到非ascii字符

我可以在不调用任何外部程序的情况下对Bash执行同样的操作吗? Bash为匹配正则表达式提供了3种模式:

  • 普通路径名扩展
  • extglob路径名扩展
  • [[string=~regex]]

  • 所有这些似乎都不支持UTF转义码,也不支持Bash本身。

    在Bash中,您可以使用带引号的ANSI字符串:

    $ x=éclair
    $ [[ $x =~ $'\xc3\xa9' ]] && echo matched
    matched
    

    请注意,您必须指定字符的UTF-8编码,因为ANSI带引号的字符串不接受任意Unicode码点。

    严格来说,列表中只有第三项涉及正则表达式。我无法将您的示例直接插入控制台,因为它拒绝任何非ascii码。但是,Bash(4.2.0)似乎没有扩展
    \x
    转义;例如,这个正则表达式不匹配:
    x=$(echo-e'\x1e');正则表达式='\x1e';[[$x=~$regex]]&&echo matched
    我看到直接插入
    '\x1e'
    (不通过变量的扩展)会扩展到UTF字符。这很有趣,对我来说是新的。我从来没有在man bash上看到过这个。这叫什么,或者,你能给我指一个推荐人吗?