awk 或 sed - 删除特定行
awk or sed - delete specific lines
我知道了
line1
line2
line3
line4
line5
line6
line7
line8
line9
line10
line11
line12
line13
line14
line15
我要这个
line1
line3
line5
line6
line8
line10
line11
line13
line15
如你所见,要删除的行从x+2到x+3,x等于要删除的行号。
我用 awk 试过了,但这不是正确的方法。
awk '(NR)%2||(NR)%3' file > filev1
知道为什么吗?
如果我正确解读了您的要求,那么
awk 'NR % 5 != 2 && NR % 5 != 4' file
应该做。
基于 Wintermutes 逻辑 :)
awk 'NR%5!~/^[24]$/' file
line1
line3
line5
line6
line8
line10
line11
line13
line15
或
awk 'NR%5~/^[013]$/' file
它是如何工作的。
从你的台词可以看出,*
的应该去掉,其他的保留。
line1
line2*
line3
line4*
line5
line6
line7*
line8
line9*
line10
line11
line12*
line13
line14*
line15
通过将数据客栈分组到每个 5
行 NR%5
,
我们看到要删除的行在每个组中都是 2
或 4
。
NR%5!~/^[24]$/'
这个分数据栈到5
组
然后这部分 /^[24]$/'
告诉不要保留 2
或 4
^
和 $
很重要所以行 12
47
我也删除了,
因为 12
包含 2
。所以我们需要锚定它 ^2$
和 ^4$
.
使用 GNU sed,您可以执行以下命令:
sed '2~5d;4~5d' test.txt
我知道了
line1
line2
line3
line4
line5
line6
line7
line8
line9
line10
line11
line12
line13
line14
line15
我要这个
line1
line3
line5
line6
line8
line10
line11
line13
line15
如你所见,要删除的行从x+2到x+3,x等于要删除的行号。
我用 awk 试过了,但这不是正确的方法。
awk '(NR)%2||(NR)%3' file > filev1
知道为什么吗?
如果我正确解读了您的要求,那么
awk 'NR % 5 != 2 && NR % 5 != 4' file
应该做。
基于 Wintermutes 逻辑 :)
awk 'NR%5!~/^[24]$/' file
line1
line3
line5
line6
line8
line10
line11
line13
line15
或
awk 'NR%5~/^[013]$/' file
它是如何工作的。
从你的台词可以看出,*
的应该去掉,其他的保留。
line1
line2*
line3
line4*
line5
line6
line7*
line8
line9*
line10
line11
line12*
line13
line14*
line15
通过将数据客栈分组到每个 5
行 NR%5
,
我们看到要删除的行在每个组中都是 2
或 4
。
NR%5!~/^[24]$/'
这个分数据栈到5
组
然后这部分 /^[24]$/'
告诉不要保留 2
或 4
^
和 $
很重要所以行 12
47
我也删除了,
因为 12
包含 2
。所以我们需要锚定它 ^2$
和 ^4$
.
使用 GNU sed,您可以执行以下命令:
sed '2~5d;4~5d' test.txt