在除1,2,3和最后一行之外的所有行的末尾添加逗号

时间:2018-03-08 09:06:33

标签: unix awk sed

我想在除了第1,2,3行和最后一行之外的所有行的末尾添加逗号。 我尝试使用sed实现它:

sed '$![1 2 3 s/,/' filename

但这不起作用。

有什么建议吗?

2 个答案:

答案 0 :(得分:4)

您可以使用地址范围1,3排除添加逗号的前三行,然后从最后一行(地址中的$)中删除逗号。

sed '1,3!s/$/,/;$s/,$//'

答案 1 :(得分:1)

另一种方法是使用b命令

跳过这些行
$ # GNU version: sed '1,3b; $b; s/$/,/'
$ seq 7 | sed -e '1,3b' -e '$b' -e 's/$/,/'
1
2
3
4,
5,
6,
7

来自manual

  

b标签无条件地分支标签。标签可以省略   在哪种情况下开始下一个周期。


perl版本

$ seq 7 | perl -pe 's/$/,/ if $. > 3 && !eof'
1
2
3
4,
5,
6,
7
  • $.包含行号,eof检查是否为最后一行