【问题标题】:Deleting every 3rd and 5th line, but not the 15th in sed删除每第 3 行和第 5 行,但不删除 sed 中的第 15 行
【发布时间】:2014-02-13 08:56:18
【问题描述】:

我正在尝试寻找一种使用 sed 删除第 3 行和第 5 行而不是第 15 行的方法,但问题是:您不能使用 ~ 方式(GNU)。它必须类似于

sed 'n;n;d' test

但我不知道如何结合 3...

示例输入

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

示例输出:

1
2
4
7
8
11
13
14
15

它需要在 sed 中,没有 awk 或 perl

【问题讨论】:

标签: bash sed


【解决方案1】:

awk 命令对于这个要求更容易理解:

awk 'NR==15 || (NR%3 && NR%5)' file
1
2
4
7
8
11
13
14
15

【讨论】:

    【解决方案2】:

    呃:

    $ seq 15 | sed -n 'p;n;p;n;n;p;n;n;n;p;n;p;n;n;n;p;n;n;p;n;p;n;p'
    1
    2
    4
    7
    8
    11
    13
    14
    15
    

    【讨论】:

      【解决方案3】:

      这可能对你有用(GNU sed):

      sed '0~15b;0~3d;0~5d' file
      

      【讨论】:

        【解决方案4】:

        使用 gnu sed:

        sed '15p;0~3d;0~5d' test
        

        这是上面 awk/sed 命令的测试结果:

        seq 99 |awk 'NR==15 || (NR%3 && NR%5)' > anubhava.txt
        seq 99 |sed -n 'p;n;p;n;n;p;n;n;n;p;n;p;n;n;n;p;n;n;p;n;p;n;p' > glenn.jackman.txt
        seq 99 |sed '0~15b;0~3d;0~5d'  > potong.txt
        seq 99 |sed '15p;0~3d;0~5d' > bmw.txt
        
        $diff anubhava.txt glenn.jackman.txt
        17a18
        > 30
        25a27
        > 45
        33a36
        > 60
        41a45
        > 75
        49a54
        > 90
        $ diff -q anubhava.txt potong.txt
        Files anubhava.txt and potong.txt differ   # same problem that can't delete line 30, 45, 60, etc.
        $ diff -q anubhava.txt bmw.txt
        $
        

        【讨论】:

          猜你喜欢
          • 2018-02-14
          • 1970-01-01
          • 2018-05-23
          • 2022-10-01
          • 2016-11-24
          • 2016-11-06
          • 1970-01-01
          • 2013-09-23
          • 2015-10-29
          相关资源
          最近更新 更多