用 Linux sed 命令替换智能引号

运维 系统运维
用你喜欢的 sed 版本去除“智能”引号。在排版学中,一对引号传统上是朝向彼此的。

用你喜欢的 sed 版本去除“智能”引号。

[[424908]]

在排版学中,一对引号传统上是朝向彼此的。它们看起来像这样:

  • “智能引号”

随着计算机在二十世纪中期的普及,这种朝向往往被放弃了。计算机的原始字符集没有太多的空间,所以在 ASCII 规范中,两个双引号和两个单引号被缩减为各一个是合理的。如今,通用的字符集是 Unicode,有足够的空间容纳许多花哨的引号和撇号,但许多人已经习惯了开头和结尾引号都只有一个字符的极简主义。此外,计算机实际上将不同种类的引号和撇号视为不同的字符。换句话说,对计算机来说,右双引号与左双引号或直引号是不同的。

用 sed 替换智能引号

计算机并不是打字机。当你按下键盘上的一个键时,你不是在按一个带有印章的控制杆。你只是按下一个按钮,向你的计算机发送一个信号,计算机将其解释为一个显示特定预定义字符的请求。这个请求取决于你的键盘映射。作为一个 Dvorak 打字员,我目睹了人们在发现我的键盘上的 “asdf” 在屏幕上产生 “aoeu” 时脸上的困惑。你也可能按了一些特殊的组合键来产生字符,如 ™ 或 ß 或 ≠,这甚至没有印在你的键盘上。

每个字母或字符,不管它是否印在你的键盘上,都有一个编码。字符编码可以用不同的方式表达,但对计算机来说,Unicode 序列 u2018 和 u2019 产生 ‘ 和 ’,而代码 u201c 和 u201d 产生 “ 和 ” 字符。知道这些“秘密”代码意味着你可以使用 sed 这样的命令以编程方式替换它们。任何版本的 sed 都可以,所以你可以使用 GNU sed 或 BSD sed,甚至是 Busybox sed。

下面是我使用的简单的 shell 脚本:

  1. #!/bin/sh 
  2. # GNU All-Permissive License 
  3. SDQUO=$(echo -ne '\u2018\u2019'
  4. RDQUO=$(echo -ne '\u201C\u201D'
  5. $SED -i -e "s/[$SDQUO]/\'/g" -e "s/[$RDQUO]/\"/g" "${1}" 

将此脚本保存为 fixquotes.sh,然后创建一个包含智能引号的单独测试文件:

  1. ‘Single quote’ 
  2. Double quote” 

运行该脚本,然后使用 cat 命令查看结果:

  1. $ sh ./fixquotes.sh test.txt 
  2. $ cat test.txt 
  3. 'Single quote' 
  4. "Double quote" 

安装 sed

如果你使用的是 Linux、BSD 或 macOS,那么你已经安装了 GNU 或 BSD 的 sed。这是原始 sed 命令的两个独特的重新实现,对于本文中的脚本来说,它们在功能上是一样的(不过并不是所有的脚本都是这样)。

在 Windows 上,你可以用 Chocolatey 安装 GNU sed。

责任编辑:未丽燕 来源: Linux中国
相关推荐

2023-07-03 22:35:50

Linux命令

2021-06-13 09:01:47

SedLinux命令

2019-09-12 08:32:40

Linuxsed命令语法

2024-10-28 16:42:04

Linux编辑器sed 命令

2009-12-25 16:27:25

Linux命令

2023-11-28 13:15:00

Linuxsed工具

2016-12-23 13:07:11

shelllinuxsed

2022-08-17 12:35:26

Linux sed编辑器

2019-08-20 14:29:45

grepsedawk

2019-09-23 15:40:42

sedLinux命令

2023-11-03 18:09:31

sed文件属性

2024-01-30 18:07:22

Linux命令行工具

2009-08-11 08:58:19

linux命令浏览网页linux命令行参数linux命令行

2010-06-23 16:09:40

Linux Bash

2009-07-31 18:48:35

linux vi命令linux vi命令详替换命令

2021-12-19 22:13:46

Linux命令网页图片

2018-04-16 10:12:46

Linux命令gunzip

2017-05-15 21:50:54

Linux引号

2021-09-22 15:00:24

Linuxwatch 命令

2021-05-24 06:20:04

Linuxsed命令
点赞
收藏

51CTO技术栈公众号