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种模式:
所有这些似乎都不支持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上看到过这个。这叫什么,或者,你能给我指一个推荐人吗?