我需要在大量文本文件中的句子之间添加两个空格。
句子结尾定义为句号、感叹号或疑问句,也可能是引号,然后是空格。刻意省略制表符和换行符。
因此,大部分工作都由以下方法完成:
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