在排版中,一对引号传统上是彼此相对的。它们看起来像这样
“弯引号”
随着计算机在二十世纪中叶变得普及,这种方向性常常被放弃。计算机的原始字符集没有太多空间,因此在 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
SED=$(which sed)
SDQUO=$(echo -ne '\u2018\u2019')
RDQUO=$(echo -ne '\u201C\u201D')
$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。
3 条评论