perl 替换中的引号 (U+0027)

perl 替换中的引号 (U+0027)

我需要在大量文本文件中的句子之间添加两个空格。

句子结尾定义为句号、感叹号或疑问句,也可能是引号,然后是空格。刻意省略制表符和换行符。

因此,大部分工作都由以下方法完成:

perl -p -i -e 's:([.?!]["”’»]?) :\1  :g;' *txt

缺少的是,有时可能会出现单引号而不是双引号。我在其中使用了“花括号”版本 (U+2019),但如果我包含 ASCII 版本,shell 会要求我用另一个 (第四个) 来完成工作。如果我转义引号/撇号 (反斜杠),则不会有任何变化。两个反斜杠,也不会有任何变化。甚至尝试了三个。

如果我取出双引号(或将其转义,并在脚本外部放置双引号而不是单引号,我会得到-bash: !][\'\: event not found

Debian 中的 bash 和 MacOS 中的 zsh 存在问题。

我们如何才能使正则表达式接受撇号(U+0027)?

答案1

这对我有用(Linux,但 perl 是 perl...,bash 也一样)

perl -i -p -e 's:([.?!]["”’\x27»]?) :\1  :g;' *txt 

特别是因为您覆盖了原始文件,有时可能不知道是否已经这样做了:如果句子之间需要恰好 2 个空格,请改用这个(包括对已经存在的第 2 个空格进行负向前瞻):

perl -i -p -e 's:([.?!]["”’\x27»]?) (?! ):\1  :g;' *txt

相关内容