删除每个第3和第5行,但不是第15行

时间:2014-02-12 19:48:54

标签: bash sed

我正在尝试使用sed来寻找删除每个第3行和第5行而不是第15行的方法,但这就是事情:你不能使用〜-way(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

4 个答案:

答案 0 :(得分:3)

对于此要求,

awk命令更容易理解:

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

答案 1 :(得分:1)

啊:

$ 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

答案 2 :(得分:0)

这可能适合你(GNU sed):

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

答案 3 :(得分:0)

使用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
$