仅替换组合符号点 + 换行符

replacing only combination symbols dot + newline

如何使用 sedtr

更正仅替换组合点和换行符 (.\n)

tr -d '.\n' 删除所有找到的点和换行符,但我只需要 remove/replace 组合

sed 's/\.\n//g' - 不要替换任何东西

非常感谢

您可以这样使用 gnu sed

s='Hello Mr. Foo.
 - How are you?
Life is good.'

sed -E '/\.$/{:a;N;s/\.\n//;ta}' <<< "$s"

Hello Mr. Foo - How are you?
Life is good.

其他选项是使用 awk:

awk -v RS= '{gsub(/\.\n/, "")} 1' <<< "$s"

Hello Mr. Foo - How are you?
Life is good.

Perl 来拯救:

perl -pe 's/\.\n//' < file.old > file.new

这可能适合您 (GNU sed):

sed ':a;N;s/\.\n//;ta;P;D' file

将另一行附加到当前行并测试所需的匹配项。如果找到匹配项,则重复,否则打印第一行并重复。

编辑:

Sed 命令由 ; 分隔:

  • :a 命名标签 a
  • N 将换行符和下一行附加到模式 space (PS) 中的当前行。如果没有更多的行,打印当前的 PS.
  • s/\.\n// 是一个替换命令,它匹配一个 . 和一个换行符并将它们替换为空。
  • ta 如果之前的替换成功,则跳转到标签 a 并重置标记替换成功的内部标志。
  • P 打印并包括 PS 中的第一个换行符。如果没有换行符就打印 PS.
  • D 最多删除并包括 PS 中的第一个换行符。如果 PS 不为空则在第一个 sed 命令处恢复(不要用下一行补充 PS),否则再次开始 sed 循环,

使用 GNU sed:

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