用 Linux sed 命令替換智能引號
在排版學中,一對引號傳統上是朝向彼此的。它們看起來像這樣:
「智能引號」
隨著計算機在二十世紀中期的普及,這種朝嚮往往被放棄了。計算機的原始字符集沒有太多的空間,所以在 ASCII 規範中,兩個雙引號和兩個單引號被縮減為各一個是合理的。如今,通用的字符集是 Unicode,有足夠的空間容納許多花哨的引號和撇號,但許多人已經習慣了開頭和結尾引號都只有一個字元的極簡主義。此外,計算機實際上將不同種類的引號和撇號視為不同的字元。換句話說,對計算機來說,右雙引號與左雙引號或直引號是不同的。
用 sed 替換智能引號
計算機並不是打字機。當你按下鍵盤上的一個鍵時,你不是在按一個帶有印章的控制桿。你只是按下一個按鈕,向你的計算機發送一個信號,計算機將其解釋為一個顯示特定預定義字元的請求。這個請求取決於你的鍵盤映射。作為一個 Dvorak 打字員,我目睹了人們在發現我的鍵盤上的 「asdf」 在屏幕上產生 「aoeu」 時臉上的困惑。你也可能按了一些特殊的組合鍵來產生字元,如 ™ 或 ß 或 ≠,這甚至沒有印在你的鍵盤上。
每個字母或字元,不管它是否印在你的鍵盤上,都有一個編碼。字元編碼可以用不同的方式表達,但對計算機來說,Unicode 序列 u2018 和 u2019 產生 『
和 』
,而代碼 u201c 和 u201d 產生 「
和 」
字元。知道這些「秘密」代碼意味著你可以使用 sed 這樣的命令以編程方式替換它們。任何版本的 sed 都可以,所以你可以使用 GNU sed 或 BSD sed,甚至是 Busybox sed。
下面是我使用的簡單的 shell 腳本:
#!/bin/sh
# GNU All-Permissive License
SDQUO=$(echo -ne 'u2018u2019')
RDQUO=$(echo -ne 'u201Cu201D')
$SED -i -e "s/[$SDQUO]/'/g" -e "s/[$RDQUO]/"/g" "${1}"
將此腳本保存為 fixquotes.sh
,然後創建一個包含智能引號的單獨測試文件:
『Single quote』
「Double quote」
運行該腳本,然後使用 cat 命令查看結果:
$ sh ./fixquotes.sh test.txt
$ cat test.txt
'Single quote'
"Double quote"
安裝 sed
如果你使用的是 Linux、BSD 或 macOS,那麼你已經安裝了 GNU 或 BSD 的 sed
。這是原始 sed
命令的兩個獨特的重新實現,對於本文中的腳本來說,它們在功能上是一樣的(不過並不是所有的腳本都是這樣)。
在 Windows 上,你可以用 Chocolatey 安裝 GNU sed。
via: https://opensource.com/article/21/9/sed-replace-smart-quotes
作者:Seth Kenlon 選題:lujun9972 譯者:geekpi 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive