如何使用sed删除每个奇数行?
remove
keep
remove
keep
remove
...
答案 0 :(得分:64)
GNU sed有一个合适的寻址模式:
sed -n '1~2!p' file
表示从第1行开始,在步骤2中,打印所有其他行。
等效地,您可以删除-n
,并删除匹配的行:
sed '1~2d'
也可以使用awk:
完成awk 'NR%2==0' file
(每当行号是2的倍数时,打印行)
答案 1 :(得分:36)
这是我能想到的最短的:
sed -n 'g;n;p' file
它应该适用于非GNU版本的sed
(以及GNU sed
)。
答案 2 :(得分:4)
Perl解决方案:
perl -ne 'print if $. % 2 == 0' file
$.
是行号
答案 3 :(得分:4)
这适用于sed的GNU和BSD(mac)版本:
要删除奇数行(打印偶数行):
sed -n ’n;p’ file
可能看起来有些混乱,所以这是逐步进行的事情:
要删除偶数行(打印奇数行):
sed -n ‘p;n’ file
这是算法内幕发生的事情:
答案 4 :(得分:2)
还有一个问题:
awk getline file