首页 > 解决方案 > 如果在非连续行上以特定字符开头,则删除换行符

问题描述

我有一个文本文件,每隔一行以 % 字符结尾。我想找到模式“% + 换行”并将其替换为“%”。换句话说,我想删除 % 之后的换行符,而不是其他换行符。

例如,我想更改以下内容:

abcabcabcabc%
123456789123
abcabcabcabc%
123456789123

abcabcabcabc%123456789123
abcabcabcabc%123456789123

我尝试了以下 sed 命令,但无济于事。

sed 's/%\n/%/g' < input.txt > output.txt

标签: bashunixsedreplace

解决方案


默认情况下 sed 不能删除换行符,因为它一次读取一个换行符分隔的行。

在每个 UNIX 框上的任何 shell 中使用任何 awk 来处理任意数量的以 结尾的行,无论是否%连续:

$ awk '{printf "%s%s", $0, (/%$/ ? "" : ORS)}' file
abcabcabcabc%123456789123
abcabcabcabc%123456789123

并带有连续的%行:

$ cat file
now is the%
winter of%
our%
discontent

$ awk '{printf "%s%s", $0, (/%$/ ? "" : ORS)}' file
now is the%winter of%our%discontent

推荐阅读