如何用sed将换行替换为分号(每第三个换行除外)
嘿,这个问题我刚好处理过!咱们分两种常见场景来说明,你可以对应自己的需求来选:
场景1:给除了每第3行(第3、6、9...行)之外的行尾加;
如果你的需求是让前两行末尾加分号,第3行保持原样,然后重复这个规律(第4、5行加,第6行不加),用这个sed命令就可以:
sed '3~3!s/$/;/' your_file.txt
命令解释:
3~3是sed的地址步长语法,意思是从第3行开始,每隔3行选中一行(也就是第3、6、9...行);!表示“对不被选中的行执行后面的替换命令”,所以剩下的第1、2、4、5、7、8...行都会被加上行尾分号,而目标特殊行保持原样。
举个实际例子,假设原文件内容是:
line1 line2 line3 line4 line5 line6
执行命令后输出就会变成:
line1; line2; line3 line4; line5; line6
场景2:把每3行合并成一行,再在末尾加一个;
如果你的需求是把连续3行内容合并成一行,然后只在整行末尾加一个分号,那用这个命令:
sed 'N;N;s/\n/ /g;s/$/;/' your_file.txt
命令解释:
- 连续两次
N:把当前行的下两行都追加到sed的模式空间里,这样一次就处理3行内容; s/\n/ /g:把这3行之间的换行符替换成空格,把多行合并成一行;s/$/;/:最后在合并后的整行末尾加上分号。
还是用上面的原文件例子,执行后输出会是:
line1 line2 line3; line4 line5 line6;
内容的提问来源于stack exchange,提问作者user2685970
相关产品推荐
相关产品推荐

