如何“ grep”指定范围内的线长*不*?


17

注意:此问题是此问答的补充:如何在给定范围内“ grep”行长?


对于行数少于8个或超过63个字符,行数不超过8个且少于63个字符的行,我们如何grep?

因此,一些可接受的字符数可能是...

7 6 5 4 3 2 1 0

...和...

64 65 66 67 ...

3
我知道您要求grep,但是您可以考虑awk,特别是如果需要进一步处理等(非常灵活且可读):awk '( length($0)<8 ) || ( length($0)>63 )' 条件的#default动作是打印与条件匹配的行。或者,减少$ 0的处理量:awk '{ l=length($0) ; if (( l<8 ) || l>63 ) { print $0 ;} }'
Olivier Dulac

@mikeserv-是的,再次审视此问题可能更有意义,以另一个问答形式完成此问答。
slm

@mikeserv-通常很痛苦,我必须将答案合并到一个Q中,然后将其从原始Q中删除。这是执行操作的指导:“当问题的重复率达到99%时,应将其合并,将多个重复问题的所有答案都放在一个位置将是有益的。这会删除答案,将其移至目标问题,然后离开当前问题作为存根,并带有指向其合并目标的链接。”
slm

我的评论怎么了?
德米特里·格里戈里耶夫

@DmitryGrigoryev-猜想有人不喜欢它。从曾经去过那里的人那里拿走-别管它了。
mikeserv

Answers:


38
grep -xv '.\{8,63\}' <input >output

grep-x开关表示整行匹配-也就是说,任何匹配的模式都必须定义一条从头到尾的线。在做...

grep -x pattern

...一般相当于...

grep ^pattern$

grep-v开关取消了模式对行选择的影响。通常在做...

grep pattern

...将仅选择与模式匹配的行,但对于-v否定的模式,只会选择匹配的行。

...所以...

grep -xv '.\{8,63\}'

...匹配从头到尾由8到63个字符之间的所有行组成,并且-v取反的选择grep仅导致打印所有其他内容。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.