使用sed刪除拼音的音調

来源:https://www.cnblogs.com/f-ck-need-u/archive/2018/03/04/8506501.html
-Advertisement-
Play Games

有時候我們對文檔過濾會有這樣的需求: 例如,製作一個比較全的姓氏拼音字典。首先去網上找一個常用姓氏拼音表。我隨便找了一個: 通常網上找到的都是些包含音調的字元序列。我們的主要目的包括: 假如上述文件存放在yindiao.txt中。 (1).去掉非拼音相關的字元,只保留拼音字母,並存放到yindiao ...


有時候我們對文檔過濾會有這樣的需求:

  1. 篩選或刪除文檔中的不規則字元,比如中文字元。
  2. 把帶有音調的字母替換成沒有音調的普通字母,特別是拼音轉換。

例如,製作一個比較全的姓氏拼音字典。首先去網上找一個常用姓氏拼音表。我隨便找了一個:

百家姓全文(按拼音排序)  【A】  安(ān)  敖(áo)  艾(ài)  愛(ài)  【B】  巴(bā)白(bái) 鮑(bào) 包(bāo) 暴(bào) 班(bān) 柏(bǎi) 畢(bì) 卞(biàn) 邊(biān)    薄(bó)  伯(bó)  卜(bǔ)  步(bù)   貝(bèi)  賁(bēn)  邴(bǐng) 別(bié) 百裡(bǎilǐ)  【C】 蔡(cài)  岑(cén) 曹(cáo) 陳(chén) 程(chéng)  褚(chǔ) 昌(chāng) 常(cháng) 成(chéng) 崔(cuī) 儲(chǔ) 車(chē) 池(chí) 從(cóng) 蒼(cāng) 柴(chái) 充(chōng) 晁(cháo)     巢(cháo) 淳於(chúnyú) 單於(chányú) 楚(chǔ)   【D】 笪(dá) 戴(dài) 狄(dí) 竇(dòu) 東(dōng) 董(dǒng) 杜(dù) 刁(diāo) 丁(dīng) 鄧(dèng) 段(duàn) 黨(dǎng) 堵(dǔ) 都(dū) 東方(dōngfāng) 端木(duānmù) 段乾(duàngān)  東郭(dōngguō) 東門(dōngmén) 第五(dìwǔ)  【E】 鄂(è)  【F】  法(fǎ) 費(fèi) 範(fàn) 樊(fán) 方(fāng) 房(fáng) 豐(fēng) 封(fēng) 酆(fēng) 馮(féng) 費(fèi) 房(fáng) 傅(fù) 伏(fú) 符(fú) 福(fú) 扶(fú) 富(fù)  【G】 蓋(gài) 甘(gān) 乾(gān) 高(gāo) 郜(gào) 戈(gē) 葛(gě) 耿(gěng) 谷(gǔ) 古(gǔ) 顧(gù) 郭(guō) 國(guó) 歸(guī) 桂(guì) 勾(gōu) 緱(gōu) 關(guān) 管(guǎn) 廣(guǎng)     公(gōng)  弓(gōng)  龔(gōng) 宮(gōng) 鞏(gǒng) 貢(gòng) 公孫(gōngsūn)  公西(gōngxī) 公羊(gōngyáng) 公冶(gōngyě) 公良(gōngliáng) 榖梁(gǔliáng)     【H】  哈(hǎ) 海(hǎi) 郝(hǎo) 韓(hán) 杭(háng) 何(hé) 和(hé) 賀(hè) 衡(héng) 花(huā)    滑(huá) 桓(huán) 懷(huái) 胡(hú) 扈(hù)    惠(huì) 華(huà) 宦(huàn) 黃(huáng)   侯(hóu) 後(hòu) 洪(hóng) 弘(hóng) 紅(hóng) 霍(huò) 赫連(hèlián) 皇甫(huángpǔ)  呼延(hūyán)  【J】  嵇(jī) 姬(jī) 吉(jí) 汲(jí) 籍(jí) 季(jì) 計(jì) 紀(jì) 薊(jì) 冀(jì) 暨(jì) 金(jīn) 靳(jìn) 家(jiā) 郟(jiá) 賈(jiǎ) 簡(jiǎn) 焦(jiāo)   薑(jiāng) 江(jiāng) 蔣(jiǎng) 晉(jìn) 經(jīng) 荊(jīng) 井(jǐng) 景(jǐng) 鞠(jū) 居(jū) 夾谷(jiágǔ)  【K】 寇(kòu) 孔(kǒng) 康(kāng) 柯(kē) 蒯(kuǎi) 隗(kuí) 夔(kuí) 匡(kuāng) 闞(kàn)     空(kōng) 亢(kàng) 況(kuàng)  【L】  李(lǐ) 郎(láng) 魯(lǔ) 柳(liǔ) 雷(léi) 藍(lán) 路(lù) 婁(lóu)   林(lín) 欒(luán) 厲(lì) 劉(liú) 柳(liǔ) 黎(lí) 呂(lǚ) 梁(liáng) 廉(lián) 魯(lǔ) 駱(luò) 羅(luó) 凌(líng) 盧(lú)   陸(lù) 欒(luán) 龍(lóng) 賴(lài) 勞(láo) 酈(lì) 藺(lìn) 連(lián) 廖(liào) 祿(lù) 利(lì)  隆(lóng) 冷(lěng) 逯(lù) 令狐(lìnghú) 閭丘(lǘqiū) 梁丘(liángqiū)  【M】  馬(mǎ) 滿(mǎn) 苗(miáo) 母(mǔ) 穆(mù) 毛(máo) 明(míng)  茅(máo) 麻(má)     蒙(méng)  孟(mèng) 糜(mí) 米(mǐ) 宓(mì)  梅(méi) 莫(mò) 墨(mò) 牟(móu) 繆(miào) 牧(mù) 慕(mù) 閔(mǐn) 俟(mòqí) 慕容(mùróng)  【N】  那(nā) 能(nài) 佴(nài) 倪(ní) 年(nián) 寧(nìng) 乜(niè) 聶(niè) 鈕(niǔ) 牛(niú)     
百家姓全文(按拼音排序)  農(nóng) 南門(nánmén) 南宮(nángōng)    【O】  歐(ōu) 歐陽(ōuyáng)  【P】  潘(pān) 龐(páng) 逄(páng) 裴(péi) 彭(péng) 蓬(péng) 皮(pí)  平(píng) 蒲(pú) 濮(pú) 浦(pǔ) 濮陽(púyáng)  【Q】  戚(qī) 齊(qí) 祁(qí) 喬(qiáo) 譙(qiáo) 強(qiáng) 屈(qū) 璩(qú) 瞿(qú) 錢(qián) 秦(qín) 欽(qīn) 琴(qín) 權(quán) 亓官(qínguān) 漆雕(qīdiāo) 邱(qiū) 秋(qiū) 裘(qiú) 仇(qiú) 曲(qū) 全(quán) 闕(quē)  【R】   冉(rǎn) 饒(ráo) 壤駟(rǎngsì) 任(rèn) 阮(ruǎn) 榮(róng) 容(róng) 芮(ruì) 戎(róng)  融(róng) 茹(rú) 汝(rǔ)  【S】  桑(sāng)  司(sī)  宋(sòng) 松(sōng) 舒(shū) 水(shuǐ) 蘇(sū) 宿(sù) 孫(sūn) 索(suǒ)  沈(shěn)  沙(shā) 邵(shào) 施(shī) 師(shī) 石(shí) 史(shǐ) 時(shí) 厙(shè) 束(shù)  殳(shū)   盛(shèng)  單(shàn) 山(shān) 商(shāng) 尚(shàng) 雙(shuāng) 韶(sháo)  莘(shēn)   申(shēn) 慎(shèn) 壽(shòu) 司馬(sīmǎ) 上官(shàngguān) 申屠(shēntú)  司徒(sītú)   司空(sīkōng) 司寇(sīkòu) 生(shēng) 帥(shuài) 佘(shé) 賞(shǎng)  【T】 邰(tái) 譚(tán) 談(tán) 陶(táo) 唐(táng) 湯(tāng) 滕(téng) 田(tián) 童(tóng)通(tōng) 佟(tóng) 鈄(tǒu) 屠(tú) 塗(tú) 太叔(tàishū) 澹台(tántái) 拓跋(tuòbá)    【W】 萬(wàn) 鄔(wū) 巫(wū) 烏(wū) 吳(wú) 伍(wǔ) 武(wǔ) 汪(wāng) 王(wáng)  危(wēi) 微(wēi) 韋(wéi) 衛(wèi) 魏(wèi) 蔚(wèi) 溫(wēn) 聞(wén) 文(wén) 翁(wēng) 沃(wò) 聞人(wénrén) 巫馬(wūmǎ)  【X】  奚(xī) 郗(xī) 席(xí) 習(xí) 郤(xì) 夏(xià) 蕭(xiāo) 咸(xián)   宣(xuān)  熊(xióng)   項(xiàng) 須(xū) 胥(xū) 徐(xú) 許(xǔ)   薛(xuē) 荀(xún) 謝(xiè) 解(xiè) 辛(xīn)    邢(xíng) 幸(xìng) )   向(xiàng) 相(xiàng) 夏侯(xiàhóu) 軒轅(xuānyuán) 鮮於(xiānyú) 西門(xīmén)  【Y】  燕(yān) 鄢(yān) 顏(yán) 言(yán) 閆(yán) 閻(yán) 嚴(yán)晏(yàn) 姚(yáo) 羊(yáng)  楊(yáng) 陽(yáng) 養(yǎng) 仰(yǎng) 葉(yè) 雲(yún) 俞(yú) 袁(yuán) 於(yū) 於(yú) 魚(yú) 虞(yú) 餘(yú) 庾(yǔ) 禹(yǔ) 鬱(yù) 喻(yù) 鬱(yù) 樂(yuè) 岳(yuè)    越(yuè) 元(yuán) 伊(yī) 易(yì) 羿(yì) 益(yì) 陰(yīn) 殷(yīn)尹(yǐn)印(yìn) 應(yīng)  尤(yóu) 游(yóu) 有(yǒu) 雍(yōng)   尉遲(yùchí) 宇文(yǔwén) 樂正(yuèzhèng) 羊舌(yángshé)  【Z】  宰(zǎi) 昝(zǎn) 查(zhā) 翟(zhái) 詹(zhān) 湛(zhàn) 張(zhāng) 章(zhāng) 趙(zhào)  訾(zǐ) 支(zhī) 甄(zhēn) 曾(zēng) 周(zhōu) 鄒(zōu) 鄭(zhèng) 朱(zhū) 諸(zhū) 竺(zhú) 祝(zhù) 臧(zāng)  宗(zōng) 鐘(zhōng) 終(zhōng) 仲(zhòng) 祖(zǔ) 左(zuǒ) 卓(zhuó) 莊(zhuāng) 諸葛(zhūgě) 宗政(zōngzhèng) 仲孫(zhòngsūn) 鐘離(zhōnglí)   長孫(zhǎngsūn) 仉督(zhǎngdū) 子車(zǐjū) 顓孫(zhuānsūn) 宰父(zǎifǔ) 左丘(zuǒqiū)

通常網上找到的都是些包含音調的字元序列。我們的主要目的包括:

  1. 去掉漢字和其它與拼音無關的字元。
  2. 將音調替換成沒有音節的字母。
  3. 去掉重覆的拼音。
  4. 排好序,每行一個。

假如上述文件存放在yindiao.txt中。

(1).去掉非拼音相關的字元,只保留拼音字母,並存放到yindiao1.txt文件中。

cat yindiao.txt | tr -s ' ' '\n' | sed -r -n "s/([^a-z])//pg" >yindiao1.txt

將得到如下格式的內容:

xíng
xìng

xiàng
xiàng
xiàhóu
xuānyuán
xiānyú
xīmén

yān
yān
yán
yán
yán
yán
yányàn
yáo
yáng
yáng
yáng

(2).將帶音節的字母替換。

如何處理音節,可能很多人不知道,但仔細閱讀過正則表達式語法說明的人想必都知道如何表示。

在正則表達式中,使用[=a=]來表示字母a的各種音節,即āáǎà。其實這不是正則中的語法,而是一種類,它稱為等價類

常見的類集還有:

  • 字元類:如[:alpha:][:alnum:]......;
  • 排序類:如[.ab.],排序類明確表示其內字元是一個整體,例如這裡的例子表示只能匹配"ab",不能匹配a或b或ba。

回歸正題,現在就可以將帶有音節的字元進行替換了。

由於26個字母,每個字母都有4個音節,光是音節字元就共有26*4=104個。所以,想要替換文件中的所有音節字元,考慮使用迴圈。

for i in {a..z};do
    sed -i -r "s/[[="$i"=]]/"$i"/g" yindiao1.txt
done

如果不知道sed中的引號為什麼這樣用,見sed修煉系列(四):sed中的疑難雜症

註意,這裡sed必須使用"-i"選項,不能重定向,因為每次迴圈都只改變一個字母的音節,每次重定向到文件中顯然不合適。

至此,得到了下麵沒有音節的拼音。最後剩下排序和去重。

xu
xu
xu
xu
xue
xun
xie
xie
xin
xing
xing

xiang
xiang
xiahou

(3).排序、去重。

sort yindiao1.txt | uniq -u > yindiao.txt

這樣就得到了期待的結果。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 截止目前已經改造了5個類: ubuntu:通過封裝驗證碼類庫一步步安裝php的gd擴展 自定義MVC框架之工具類-分頁類的封裝 自定義MVC框架之工具類-文件上傳類 自定義MVC框架之工具類-圖像處理類 這個模型類支持以下功能: >連貫操作,js叫鏈式操作,連貫操作的函數可以打亂順序,最後一個函數必 ...
  • Go語言記憶體管理(一)記憶體分配 golang作為一種“高級語言”,也提供了自己的記憶體管理機制。這樣一方面可以簡化編碼的流程,降低因記憶體使用導致出現問題的頻率(C語言使用者尤其是初學者應該深有體會),對程式猿友好。另一方面也可以減少記憶體相關係統調用,提升性能。 先瞭解下記憶體管理大致策略: 申請一塊較大 ...
  • 題目描述 Frank對天文學非常感興趣,他經常用望遠鏡看星星,同時記錄下它們的信息,比如亮度、顏色等等,進而估算出星星的距離,半徑等等。 Frank不僅喜歡觀測,還喜歡分析觀測到的數據。他經常分析兩個參數之間(比如亮度和半徑)是否存在某種關係。 現在Frank要分析參數XX 與YY 之間的關係。他有 ...
  • 近期大家無論是自己做數據分析還是緊急答辯做PPT,可能都需要畫一些數據的展示圖;以前大家都是用excel畫圖,但excel畫圖存在一定的局限性,比如你要畫個累積直方圖,excel就很麻煩了,所以給大家介紹一個基於python的交互數據分析工具,ipython notebook。 近期大家無論是自己做 ...
  • CPython: 安裝Python後,官方提供了一個Python解釋器CPython,是通過C語言寫的,在命令行下運行Python就是啟動Cpython解釋器,運用最廣泛的一個。 Ipython: 基於Cpython之上的一個解釋器,跟Cpython差不多,只不過在互動式上有所增強; Jpython ...
  • 一.概要 本文主要是學習CodeFirst思想。技術上的實現是C#(.net framework4.6.1) 控制台 + PostgreSQL 10.2.1 代碼:https://pan.baidu.com/s/1ggzHRub 二.實現過程 1.新建控制台 2.添加nuget包:EntityFra ...
  • 一、查看是否安裝了ssh服務 apt-cache policy openssh-client openssh-server ubuntu預設安裝了openssh-client,openssh-server需要手動安裝 二、安裝ssh服務 apt-get install openssh-server ...
  • 一、環境說明:操作系統:CentOS-7-x86_64-Minimal-1611虛擬機:VMware® Workstation 12 Pro;12.5.5 build-5234757伺服器:node1(User1),node2(User2)二、實現內容:node1 伺服器用戶 User1 可通過 S... ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...