如何grep字符的精确十六进制值
How to grep for exact hexadecimal value of characters
我正在尝试 grep 以获取一系列 UTF-8 编码字符的十六进制值,我只希望 return 编辑该特定字符范围。
我目前有这个:
grep -P -n "[\xB9-\xBF]" $str_st_location >> output_st.txt
但是这个 returns 每个字符在其十六进制表示中具有任何这些十六进制值,即它 returns 00B9 - FFB9 只要 B9 存在。
有没有一种方法可以使用 grep 指定我只需要搜索的 exact/specific 十六进制值范围?
示例输入:
STRING_OPEN
Open
æ–å¼€
Ouvert
Abierto
Открыто
Abrir
现在使用我的 grep 语句,它应该 return 第 3 行和第 6 行,但它还在我的文件中包含一些俄语和中文文本,因为语言范围包括十六进制值我'我正在搜索这些:
断开
Открыто
很遗憾,由于工作相关,我无法提供更多样本输入。
编辑:实际上下面的代码片段有效!
grep -P -n "[\x{00B9}-\x{00BF}]" $str_st_location > output_st.txt
它找到了所有损坏的字符并且没有误报。现在唯一的问题是带有损坏字符的行自动获得 "uncorrupted" 即当我打开文件时,grep 的输出是损坏字符的更正版本。例如,它找到 æ–å¼€ 并且在文本文件中显示为断开。
由于您正在使用 -P
,您可能正在使用 GNU grep,因为那是 GNU grep 扩展。您的命令可以使用带有 pcre 8.37 和 UTF-8 语言环境的 GNU grep 2.21,但是过去存在多字节字符和字符范围的错误。您可能使用的是旧版本,或者您的语言环境可能设置为使用单字节字符的语言环境。
如果您不想升级,可以通过匹配单个字节来匹配此字符范围,这应该适用于旧版本。您需要将字符转换为字节并搜索字节值。假设UTF-8,U+00B9是C2 B9,U+00BF是C2 BF。将 LC_CTYPE
设置为使用单字节字符的内容(如 C
)将确保即使在正确支持多字节字符的版本中它也能匹配单个字节。
LC_CTYPE=C grep -P -n "\xC2[\xB9-\xBF]" $str_st_location >> output_st.txt
我正在尝试 grep 以获取一系列 UTF-8 编码字符的十六进制值,我只希望 return 编辑该特定字符范围。 我目前有这个:
grep -P -n "[\xB9-\xBF]" $str_st_location >> output_st.txt
但是这个 returns 每个字符在其十六进制表示中具有任何这些十六进制值,即它 returns 00B9 - FFB9 只要 B9 存在。
有没有一种方法可以使用 grep 指定我只需要搜索的 exact/specific 十六进制值范围?
示例输入:
STRING_OPEN
Open
æ–å¼€
Ouvert
Abierto
Открыто
Abrir
现在使用我的 grep 语句,它应该 return 第 3 行和第 6 行,但它还在我的文件中包含一些俄语和中文文本,因为语言范围包括十六进制值我'我正在搜索这些:
断开
Открыто
很遗憾,由于工作相关,我无法提供更多样本输入。
编辑:实际上下面的代码片段有效!
grep -P -n "[\x{00B9}-\x{00BF}]" $str_st_location > output_st.txt
它找到了所有损坏的字符并且没有误报。现在唯一的问题是带有损坏字符的行自动获得 "uncorrupted" 即当我打开文件时,grep 的输出是损坏字符的更正版本。例如,它找到 æ–å¼€ 并且在文本文件中显示为断开。
由于您正在使用 -P
,您可能正在使用 GNU grep,因为那是 GNU grep 扩展。您的命令可以使用带有 pcre 8.37 和 UTF-8 语言环境的 GNU grep 2.21,但是过去存在多字节字符和字符范围的错误。您可能使用的是旧版本,或者您的语言环境可能设置为使用单字节字符的语言环境。
如果您不想升级,可以通过匹配单个字节来匹配此字符范围,这应该适用于旧版本。您需要将字符转换为字节并搜索字节值。假设UTF-8,U+00B9是C2 B9,U+00BF是C2 BF。将 LC_CTYPE
设置为使用单字节字符的内容(如 C
)将确保即使在正确支持多字节字符的版本中它也能匹配单个字节。
LC_CTYPE=C grep -P -n "\xC2[\xB9-\xBF]" $str_st_location >> output_st.txt