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

时间:2017-08-31 08:27:05

标签: bash sed tr

如何更正仅使用.\nsed

替换组合点和换行符(tr

tr -d '.\n'删除所有结果点和换行符,但我需要删除/替换组合

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

非常感谢

4 个答案:

答案 0 :(得分:1)

您可以像这样使用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.

答案 1 :(得分:1)

这可能适合你(GNU sed):

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

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

编辑:

Sed命令由;分隔:

  • :a将标签命名为a
  • N将新行和下一行附加到模式空间(PS)中的当前行。如果没有其他行,请打印当前的PS。
  • s/\.\n//是一个与.和换行符匹配的替换命令,并将其替换为空。
  • ta如果上一次替换成功,请跳转到标签a并重置标记成功替换的内部标记。
  • P打印并包含PS中的第一个换行符。如果没有新行,只需打印PS。
  • D删除并包含PS中的第一个换行符。如果PS不是空的,则在第一个sed命令恢复(不要用下一行补充PS),否则再次开始sed循环,

答案 2 :(得分:0)

Perl救援:

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

答案 3 :(得分:0)

使用GNU sed

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