Grep逐行,但如果不包含char

时间:2017-09-07 19:45:19

标签: bash grep

我需要用它的长度grep '.\{80\}' -B 1 file来一行,但前提是它不包含特殊的字符>

我的文件看起来像

>asdf1
xxxxx
>asdf2
xxxxxxxxxxxxxx

并且应该在xxxx长度上决定,如果上面的行+上面的那个通过过滤器。带有'>'的行应该简单地忽略计算。

预期输出应该是一个文件,其中包含超过20的上线和xxxxx线。

2 个答案:

答案 0 :(得分:1)

检查此测试。似乎是你在寻找:

$ echo "$f1"
>asdf
xxxxxxxxxx
>asdf
xxxxxxxxxxxxxx
>bcde
xxxxx
>ghtr
xxxx
>qwer
xxxxxx

$ grep '^[^>].\{4\}$' -B1 <(echo "$f1") #exactly 5 chars
>bcde
xxxxx

$ grep '^[^>].\{8,\}$' -B1 <(echo "$f1") #9 chars and longer
>asdf
xxxxxxxxxx
>asdf
xxxxxxxxxxxxxx

所以在你的情况下,根据你的评论,这将为你带来正好20个字符的行:

$ grep '^[^>].\{19\}$' -B1 file

或者超过20岁:

$ grep '^[^>].\{19,\}$' -B1 file

答案 1 :(得分:1)

目前还不清楚你究竟要求的是什么,或许还有一些简单的事情:

awk '/^>/ {a=$0;next} length($0) > 20{print a RS $0}' input