![需要拉出中间包含图案的线,但不要拉到线尾](https://linux22.com/image/177618/%E9%9C%80%E8%A6%81%E6%8B%89%E5%87%BA%E4%B8%AD%E9%97%B4%E5%8C%85%E5%90%AB%E5%9B%BE%E6%A1%88%E7%9A%84%E7%BA%BF%EF%BC%8C%E4%BD%86%E4%B8%8D%E8%A6%81%E6%8B%89%E5%88%B0%E7%BA%BF%E5%B0%BE.png)
所以我有一堆字符行,所有行都以 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>