如何用Vim、sed或awk仅删除奇数行的换行符?
合并文件中的奇数行与后续偶数行(Vim、sed、awk实现)
Vim 方法
直接在Vim里执行命令就能完成:
:%s/\n\(.\)/ \1/g
这个命令会匹配每一行末尾的换行符加上下一行的第一个字符,把换行符替换成空格,从而把奇数行和它后面的偶数行拼到一起。
或者用更直观的逐行处理方式:
:g/^line/norm J
g/^line 会选中所有以line开头的行(也就是你的奇数行),norm J 是在普通模式下执行J命令,把当前行和下一行合并,中间用空格分隔。
sed 方法
一行命令就能搞定:
sed 'N;s/\n/ /' 文件名
N命令会把下一行内容追加到当前模式空间,s/\n/ /把模式空间里的换行符替换成空格,完成奇数行和偶数行的合并。如果需要直接修改原文件,加上-i参数:
sed -i 'N;s/\n/ /' 文件名
awk 方法
通过判断行号来实现:奇数行先暂存内容,偶数行时和暂存的内容拼接输出:
awk 'NR%2==1{line=$0;next} {print line " " $0}' 文件名
NR%2==1识别奇数行,把行内容存到变量line里,next跳过后续操作- 遇到偶数行时,打印暂存的
line加空格再加当前行内容
如果文件最后一行是奇数行,上面的命令会漏掉它,可以调整确保所有行都被处理:
awk 'NR%2==1{line=$0;next} {print line " " $0} END{if(NR%2==1) print line}' 文件名
内容的提问来源于stack exchange,提问作者klatls
相关产品推荐
相关产品推荐

