2014-02-12 62 views
1

我想找一種方法來刪除每個第3和第5行,但不是第15個使用sed,但這是事情:你不能使用〜路(GNU)。它必須像刪除每個第3和第5行,但不是在sed第15行

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

+0

'sed'絕對不是最好的工具。 –

+3

http://rosettacode.org/wiki/FizzBu​​zz –

回答

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 
3

awk命令是更容易理解這一要求:

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

這可能會爲你工作(GNU SED):

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

使用GNU sed可以:

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

這裏是test re從上面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 
$