Linux中國

用 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

本文由 LCTT 原創編譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的電子郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國