在一段文件后搜索并替换 1 个或多个空格为 2 个空格

Kha*_*yen 4 sed text-processing

问:您会给出什么命令来打印(显示在屏幕上)userNotes.txt 的更正文本,其中所有句子结尾都需要在下一个句子开头之前有两个空格?

这是我的代码

sed 's/.\s/.\s\s/' 
Run Code Online (Sandbox Code Playgroud)

但这也将以点和 2 个空格结尾的行更改为点和 3 个空格。

Sté*_*las 6

sed 's/\.[[:space:]]\{1,\}/.  /g'
Run Code Online (Sandbox Code Playgroud)

将用后跟两个空格替换一个点(由\.或匹配[.],记住.匹配任何字符)后跟一个或多个空白字符([[:space:]]标准等价于\s.

你可能想这样做的!?也:

sed 's/\([.!?]\)[[:space:]]\{1,\}/\1  /g'
Run Code Online (Sandbox Code Playgroud)

使用最新版本的 GNU sed,您可以将其缩短为:

sed -E 's/([.!?])\s+/\1  /g'
Run Code Online (Sandbox Code Playgroud)

或与perl

perl -lne 's/[.!?]\K\s+/  /g'
Run Code Online (Sandbox Code Playgroud)

[[:space:]]\s匹配任何空白字符(尽管perl仅限于 ASCII 字符)。这包括 CR 字符,尽管它们出现在 MS-DOS 文本文件的行尾,但通常不用作间距。因此,如果应用于 MS-DOS 格式的文件,这些命令最终可能会破坏 MS-DOS 行分隔符。

取而代之的[[:space:]]/ \s,你可以使用[[:blank:]]/\h不包括CR(\h被支持的perl,但不是GNU sed)。