可以使用 sed
的 N
命令将相邻两行合并为一行,并通过替换换行符实现格式调整。以下是具体命令和解释:
方法 1:直接合并相邻两行
bash
复制
sed 'N;s/\n/ /' input.txt
-
作用:
将文件的第1行与第2行合并、第3行与第4行合并,以此类推。 -
关键参数:
-
N
:读取下一行到模式空间(Pattern Space),与当前行合并。 -
s/\n/ /
:将合并后的两行之间的换行符替换为空格(可替换为其他字符,如逗号,
)。
-
-
示例:
输入文件input.txt
:复制
Line1 Line2 Line3 Line4
输出结果:
复制
Line1 Line2 Line3 Line4
方法 2:指定步长合并(GNU sed 适用)
bash
复制
sed '1~2{N;s/\n/ /}' input.txt
-
作用:
从第1行开始,每隔一行(即处理所有奇数行)执行合并操作,效果与上述命令一致。 -
关键参数:
-
1~2
:匹配起始行号为1,步长为2(即处理第1、3、5…行)。 -
N
和替换逻辑同上。
-
注意事项
-
奇数行处理
如果文件总行数为奇数,最后一行会单独保留(不会被合并)。例如:bash
复制
# 输入文件 Line1 Line2 Line3 # 输出结果 Line1 Line2 Line3
-
换行符替换
-
默认用空格连接两行内容,可根据需求调整替换符:
bash
复制
sed 'N;s/\n/,/' input.txt # 用逗号连接 sed 'N;s/\n/\t/' input.txt # 用制表符连接
-
-
原地修改文件(谨慎使用)
若需直接修改原文件,可添加-i
参数(备份原文件可加-i.bak
):bash
复制
sed -i 'N;s/\n/ /' input.txt # 直接修改文件 sed -i.bak 'N;s/\n/ /' input.txt # 备份后修改
扩展场景
-
合并时保留换行符
如果仅合并行但不删除换行符(如生成 CSV 格式):bash
复制
sed 'N;s/\n/,/;' input.txt > output.csv
-
处理含空行的文件
若文件存在空行,可先删除空行再合并:bash
复制
sed '/^$/d; N;s/\n/ /' input.txt
通过上述方法,可以高效地将文件中的相邻两行合并为一行,适用于日志处理、数据格式转换等场景。