如何更正仅将组合点和换行符(.n
)替换为sed
或tr
tr -d '.n'
删除所有找到的点和换行符,但我只需要删除/替换组合
sed 's/.n//g'
- 不要更换任何东西
非常感谢
这可能对你有用(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 循环,
你可以像这样使用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
使用 GNUsed:
sed -z 's/.n//g' file