【问题标题】:Add comma at end of all lines except 1 , 2, 3 and last line在除 1 , 2, 3 和最后一行之外的所有行的末尾添加逗号
【发布时间】:2018-03-08 18:57:52
【问题描述】:

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

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

但这不起作用。

有什么建议吗?

【问题讨论】:

    标签: unix awk sed


    【解决方案1】:

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

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

    【讨论】:

    • Perl 版本,仅供娱乐:perl -ne 's/$/,/ unless (1 .. 3) || eof'
    • 非常干净。只有一个例外情况会失败:如果文件只有 1、2、3 行长并且最后一行末尾有一个 ,sed '1,3{$q};1,3!s/$/,/;$s/,$//' 应该解决这个问题。
    • @melpomene 应该是 -pe... 同样的另一种方法是 perl -pe 's/$/,/ if $. > 3 && !eof'
    【解决方案2】:

    另一种方法是使用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 检查是否是最后一行

    【讨论】:

      猜你喜欢
      • 2016-05-03
      • 2019-09-25
      • 2012-12-03
      • 1970-01-01
      • 1970-01-01
      • 2016-01-20
      • 2016-04-13
      • 1970-01-01
      • 2019-02-12
      相关资源
      最近更新 更多