搜索文件句点后的 1 个或多个空格并将其替换为 2 个空格

搜索文件句点后的 1 个或多个空格并将其替换为 2 个空格

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

这是我的代码

sed 's/.\s/.\s\s/' 

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

答案1

sed 's/\.[[:space:]]\{1,\}/.  /g'

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

您可能还想这样!?

sed 's/\([.!?]\)[[:space:]]\{1,\}/\1  /g'

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

sed -E 's/([.!?])\s+/\1  /g'

或者与perl

perl -lne 's/[.!?]\K\s+/  /g'

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

您可以使用不包含 CR 的/来代替[[:space:]]/ (受支持,但 GNU 不支持)。\s[[:blank:]]\h\hperlsed

答案2

假设您的文本保存在名为“file”的文件中,那么您可以awk按如下方式使用

cat file
this is OK: Turn the knob. Push the \u201con\u201d button. This is not: Turn the knob. Push the \u201con\u201d button.    

awk '$1=$1' OFS=" " file

sed如下:

sed -E "s/[[:space:]]+/ /g" file

相关内容