Shell

如何在 grep 中使用十六進制程式碼指定字元?

  • March 18, 2022

我正在使用以下命令來 grep 十六進制程式碼 0900(而不是 अ)到 097F(而不是 व)的字元集範圍。如何使用十六進制程式碼代替 अ 和 व?

bzcat archive.bz2 | grep -v '<[अ-व]*\s' | tr '[:punct:][:blank:][:digit:]' '\n' | uniq | grep -o '^[अ-व]*$' | sort -f | uniq -c | sort -nr | head -50000 | awk '{print "<w f=\""$1"\">"$2"</w>"}' > hindi.xml

我得到以下輸出:

   <w f="399651">और</w>
   <w f="264423">एक</w>
   <w f="213707">पर</w>
   <w f="74728">कर</w>
   <w f="44281">तक</w>
   <w f="35125">कई</w>
   <w f="26628">द</w>
   <w f="23981">इन</w>
   <w f="22861">जब</w> 
   ...

我只想在上面的命令中使用十六進制程式碼而不是 अ 和 व。

如果根本不可能使用十六進制程式碼,我可以使用 unicode 而不是字元集的十六進制程式碼(‘अ-व’)嗎?

我正在使用 Ubuntu 10.04

查看grep:查找所有包含日文漢字的行

文本通常以 UTF-8 編碼;所以你必須使用 UTF-8 編碼中使用的字節的十六進制值。

grep "["$'\xe0\xa4\x85'"-"$'\xe0\xa4\xb5'"]"

grep '[अ-व]'

是等效的,並且它們執行基於字元類/括號表達式語言環境的匹配(即,匹配取決於梵文腳本的排序規則(即,匹配不是“\u0905 和 \0935 之間的任何字元”,而是“梵文 A 和梵文 VA 之間的任何排序”;可能存在差異。

$'...'是 bash、ksh 和 zsh 的“ANSI-C 轉義字元串”語法。它只是一種更簡單的輸入字元的方法。您也可以使用\uXXXX\UXXXXXXXX轉義直接詢問 bash 和 zsh 中的程式碼點。)

另一方面,你有這個(注意 -P):

grep -P "\xe0\xa4[\x85-\xb5]"

這將與這些字節值進行二進制匹配。

引用自:https://unix.stackexchange.com/questions/19491