我正在尝试寻找一种方法来删除每 3 行和第 5 行,但不删除第 15 行使用 sed,但事情是这样的:你不能使用 ~ 方式 (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
awk 命令对于此要求更容易理解:
awk 'NR==15 || (NR%3 && NR%5)' file
1
2
4
7
8
11
13
14
15
呃:
$ 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
这可能对你有用(GNU sed):
sed '0~15b;0~3d;0~5d' file
使用 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
$