grep不包括第一个字符

时间:2014-08-14 14:14:38

标签: bash shell unix grep

如何找到图案位于线条中间的线条。即在下面的例子中。我想只获得第8行,但不包括第1和第5行的grepping" @"

我知道我会使用grep "^@"只查找第一个字符但是如何排除它?

@DD65WKN1:203:H7T67ADXX:2:2216:19936:100494 1:N:0:
GTCGTTCTTCAGGTTCTC
+
FFFFFIIIIFFFIFFFFF
@DD65WKN1:203:H7T67ADXX:2:2216:6629:100501 1:N:0:
TAAAGTAGCAAAAATG
+
FFFFFFFFIFBFIFFF@DD65WKN1:203:H7T67ADXX:2:2216:6629:100501 1:N:0:
TAAAGTAGCAAAAATG
+
FFFFFFFFIFBFIFFF

由于

3 个答案:

答案 0 :(得分:4)

您可以预先匹配任何字符,以便@如果只是在第一个位置就不会匹配:

$ grep '.@' file
FFFFFFFFIFBFIFFF@DD65WKN1:203:H7T67ADXX:2:2216:6629:100501 1:N:0:

请注意.匹配任何字符。要完全确定(第一个解决方案会匹配以@@开头的行),您可以使用以下内容否定@

grep '[^@]@' file

或者还表示您要查找以no-@字符集开头的任何行(至少有一行,如+所示)。

grep '^[^@]\+@' file

答案 1 :(得分:1)

将grep与Perl-regex选项一起使用,该选项支持负面反馈。

$ grep -P '(?<!^)@' file
FFFFFFFFIFBFIFFF@DD65WKN1:203:H7T67ADXX:2:2216:6629:100501 1:N:0:

上面的grep命令会打印在开头没有@符号的行,但它可能出现在该行的某个位置。

答案 2 :(得分:1)

关于unix过滤器的最好的事情是将它们组合起来

grep --invert-match '^@' file | grep '@'

或更传统

sed '/^@/d' file | grep '@'