如何使用标准实用程序将“.”替换为“.\n”?

How to replace ". " with ".\n" with standard utilities?

如何用点后跟新行替换所有点后跟 space 的序列? 在 unix 机器上,使用 POSIX 工具。

我认为 sedtr 可能适合这份工作。但我想不通。 我试过

sed 's/. /.\n/g' file

正在阅读 How can I replace a newline (\n) using sed? 没让我成功。

编辑:我在不同的转义之间迷路了,忘记了我应该转义点。所以 sed 's/\. /\.\n/g' file 适合我。

有了 awk,您可以使用它的 gsub 功能轻松地做到这一点。这应该适用于 awk 恕我直言的任何版本。您可以简单地全局替换文字 DOT 后跟 space 和点和 ORS(这是新行),然后简单地打印该行。

awk '{gsub(/\. /,"."ORS)} 1' Input_file

并非所有 sed 都会将 \n 视为替换字符串中的换行符。但是你可以逃避换行符。
例如:

$ echo foo. bar | sed 's/\. /.\
> /'
foo.
bar

$ n='                               
'
$ echo foo. bar | sed "s/\. /.\$n/"
foo.
bar

使用这个 Perl 单行代码,其中 [.] 是一个仅由句点组成的字符 class:

perl -pe 's{[.] }{.\n}g' in_file

就地更改文件:

perl -i.bak -pe 's{[.] }{.\n}g' in_file