所以我有一堆字符行,所有行都以 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'
:
或grep
x2:
grep -v 8$ <file | grep 8
第一次通过时拒绝以 8 结尾的行。第二遍选择包含 8 的行。
答案2
您的要求不清楚,但要打印8
中间的行,无论它们末尾是否也有 8,这就是我的要求思考你想要的,就是:
grep '8.' file
答案3
像那样:
grep -E '8.+$' <FILE>