Linux

為什麼這個詞不能是grep?

  • November 17, 2021

我只能訪問busybox, v 1.27

我正在嘗試使用從 PDF 文件中提取的巨大 TXT 文件作為 TXT 字典,以便控制台友好。我想要得到的詞是該行的第一個詞。接下來是定義。

Word I'm grepping for:

patético

我正在使用的一個班輪是這樣的:

cat ./rae.txt | grep '^patético'

cat正在使用,因為我可以更快地刪除我正在尋找的單詞,而且效率更高。只需刪除該行的最後一部分,即術語,它就可以節省幾次擊鍵。

大多數時候,我會得到我正在搜尋的單詞的定義,例如anhelo.

$ grep -e '^anhelo' ./rae.txt
anhelo. (Del lat. anhelus). 1. m. Deseo vehemente.     
anheloso, sa. (Del lat. anhelosus). 1. adj. Que tiene o siente anhelo. Anhelosos de con-   cluir. 2. adj. Propio de lo que muestra anhelo. Mirada, búsqueda anhelosa. 3. adj. Dicho de la   respiración: Frecuente y fatigosa. 4. adj. desus. Que respira de este modo.     

如您所見,每一行都有定義,anhelo並且anheloso.

首先,我認為問題是單詞後面的點.和/或逗號,,我認為它被擴展或解釋為特殊字元而不是純文字。但事實並非如此。

我的問題是:

為什麼我不能 grep ^patético 為什麼這不起作用?

grep -e '^patético' ./rae.txt

我正在執行的文本grep是:

patería. 1. f. coloq. Chile y Perú. Muestra ocasional y fingida de amistad.     

paternal. (De paterno). 1. adj. Propio del afecto, cariño o solicitud de padre.     

paternalismo. 1. m. Tendencia a aplicar las formas de autoridad y protección propias del   padre en la familia tradicional a relaciones sociales de otro tipo; políticas, laborales, etc. U. m.   en sent. peyor.     

paternalista. 1. adj. Dicho de una persona: Que adopta el paternalismo como forma de   conducta. U. t. c. s. 2. adj. Que responde o parece responder a dicha actitud.     

paternalmente. 1. adv. m. De modo propio o digno de un padre.     

paternidad. (Del lat. paternitas, -atis). 1. f. Cualidad de padre. 2. f. Tratamiento que en   algunas órdenes dan los religiosos inferiores a los padres condecorados de su orden, y que   los seculares dan por reverencia a todos los religiosos en general, considerándolos como   padres espirituales.     

paterno, na. (Del lat. paternus). 1. adj. Perteneciente o relativo al padre. 2. adj. Propio   del padre. 3. adj. Derivado de él.  V. casa paterna     

paternóster. (Del lat. Pater noster, Padre nuestro, palabras con que principia la oración   dominical). 1. m. Oración del padrenuestro. 2. m. Padrenuestro que se dice en la misa, y es   una de las partes de ella. 3. m. Cada uno de los aditamentos de alambre que se adaptan al   chambel para aumentarle su capacidad de pesca. 4. m. Chambel ya preparado con estos   artilugios. 5. m. coloq. Nudo gordo y muy apretado.     

patero, ra. (De pato1). 1. adj. Chile y Perú. Adulador, lisonjeador. U. t. c. s. 2. m.   Cazador de patos salvajes.     

pateta. (De pata1). 1. m. coloq. diablo (|| príncipe de los ángeles rebelados). Ya se lo   llevó pateta. No lo hiciera pateta. 2. m. coloq. Persona que tiene un vicio en la conformación   de los pies o de las piernas. 3. m. pl. u. c. sing. Méx. diablo (|| príncipe de los ángeles rebela-   dos). EL patetas.     

patéticamente. 1. adv. m. De modo patético.     

patético, ca. (Del lat. patheticus, y este del gr. o, que impresiona, sensible). 1. adj. Que   es capaz de mover y agitar el ánimo infundiéndole afectos vehementes, y con particularidad   dolor, tristeza o melancolía.     

patetismo. 1. m. Cualidad de patético.     

patí. (De or. guar.). 1. m. Arg. y Ur. Pez grande de río, de color gris azulado con man-   chas oscuras. 2. m. C. Rica. Especie de empanada rellena de carne o papas.     

-patía. (Del lat. -pathia, y este del gr. a, de la raíz -, sufrir, experimentar). 1. elem. com-   pos. Significa 'sentimiento', 'afección' o 'dolencia'. Homeopatía, telepatía.     

patiabierto, ta. (De pata1 y abierto). 1. adj. coloq. Que tiene las piernas torcidas e irreg-   ulares, y separadas una de otra.     

順便說一句, is 不僅僅是patético每個單詞都帶有tilde; 在這個詞是é。我的系統沒有 UTF-8 支持,也沒有安裝語言包。我認為這不應該是一個問題,因為字母只是一個字節流,而且如果我利用less搜尋不顯示為grep.

編輯0

當地的

LANG=C
LC_CTYPE="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_COLLATE="C"
LC_MONETARY="C"
LC_MESSAGES="C"
LC_PAPER="C"
LC_NAME="C"
LC_ADDRESS="C"
LC_TELEPHONE="C"
LC_MEASUREMENT="C"
LC_IDENTIFICATION="C"
LC_ALL=

文件 -i rae.txt

rae.txt: text/plain; charset=utf-8

編輯1

控制台程式碼頁

C
POSIX

ANSI_X3.110-1983
ANSI_X3.4-1968
ISO-8859-1
ISO-8859-15
ISO-8859-2

編輯2 處理rae.txticonv``ISO8859-1

./rae-iso88591.txt: text/plain; charset=iso-8859-1

好吧,不確定這是否是您的問題,但找不到正確行的一個可能原因是字母 é 的兩種編碼。有 Unicode 字元 U+00E9(帶有銳音的拉丁文小寫字母 E),它本身就是整個字形;還有e和 U+0301 的組合(組合重音)。那些的 UTF-8 表示將是c3 a965 cc 81十六進制。

從您的問題中復製文本,該字母顯示為 U+00E9。

所以:

$ grep ^patético file.txt    # no output
$ grep ^patético file.txt
patético, ca. (Del lat. patheticus, ...

當然,根據系統的設置方式,首先輸入角色可能會出現問題,但您可以通過以下方式解決這個問題:

$ grep $'^pat\xc3\xa9tico' file.txt
patético, ca. (Del lat. patheticus, ...    

轉換為 ISO 8859-1 會將其轉換為單字節e9,因此在C語言環境中,單字節.就足以匹配它。雖然至少在我的系統上,使用 UTF-8 語言環境,唯一的e9字節將是無效字元並且.不會匹配它。

當然,對於我的 UTF-8 終端來說,它仍然是一個無效字元,所以輸出如下所示:

$ iconv -f utf8 -t latin1 file.txt  | LC_ALL=C grep $'^pat.tico'
pat�tico, ca. (Del lat. patheticus, ...

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