需要拉出中间包含图案的线,但不要拉到线尾

需要拉出中间包含图案的线,但不要拉到线尾

所以我有一堆字符行,所有行都以 8 结尾,有些行中间也有 8,我想从文件中专门提取那些中间有 8 的行,这是一个示例中间有 8 的线会是什么样子

lcl|XM_024182377.1_cds_XP_024038145.1_1 MSDLTELFTWTCSRCDGLTKGFLGVAKDLNAIVIAFRGTQEHSIQNWIEDLFWKQLDINYPGMSDAMVHH GFYSAYHNTTIRPAIINAVERAKDFYGD8LNIMVTGHSMGGAMAAFCGLDLTVNLGIQNVQVMTFGQPRIG NAAFASYYTQL TFRVTNDHDIVPHLPPYSYFPQKTYHHFPREVWLYHIGLGSLIYEVEKICDGSGE DPSCSRSVTGNSVSDHLVYFGVRMGCNEWTPCRIVMDPRVAEYGKTDLKGNFILSRPPAASILKLRTDSD AAGNHF8

答案1

当需要多个条件时,awk它可能更容易使用:sed

awk '!/8$/ && /8/' file

这会根据两个条件选择要打印的行:才不是匹配锚定的正则表达式8$匹配8。 sed 中的逻辑相同sed -n '/8$/!{/8/p;}'

与 的sed逻辑略有不同:

sed '/8$/d; /8/!d' file

8$这通过删除匹配或不匹配的行来过滤行8。 awk 中的逻辑相同awk '/8$/ || !/8/ {next} 1'

grepx2:

grep -v 8$ <file | grep 8

第一次通过时拒绝以 8 结尾的行。第二遍选择包含 8 的行。

答案2

您的要求不清楚,但要打印8中间的行,无论它们末尾是否也有 8,这就是我的要求思考你想要的,就是:

grep '8.' file

答案3

像那样:

grep -E '8.+$' <FILE>

相关内容