bash捕获模式的特定实例并排除其他实例

bash捕获模式的特定实例并排除其他实例,bash,awk,sed,grep,Bash,Awk,Sed,Grep,我试图捕获并读入$line文件中只有del的一行或几行,第2行就是一个例子。第3行中有del,但它也有ins,而bash在执行时当前捕获了这两者。我不知道如何排除除del之外的任何内容,而只捕获这些行。谢谢 文件 期望输出 带电流输出的bash 如果可以的话,请你试试下面的 如果可以的话,请你试试下面的 尝试: 修订后的代码也很干净,避免了错误 如果文件中的最后一行没有终止换行符,此解决方案可能会失败。如果这是一个问题,请参阅的可接受答案以获取解决方案。尝试: 修订后的代码也很干净,避免了错误

我试图捕获并读入$line文件中只有del的一行或几行,第2行就是一个例子。第3行中有del,但它也有ins,而bash在执行时当前捕获了这两者。我不知道如何排除除del之外的任何内容,而只捕获这些行。谢谢

文件

期望输出

带电流输出的bash


如果可以的话,请你试试下面的


如果可以的话,请你试试下面的

尝试:

修订后的代码也很干净,避免了错误

如果文件中的最后一行没有终止换行符,此解决方案可能会失败。如果这是一个问题,请参阅的可接受答案以获取解决方案。

尝试:

修订后的代码也很干净,避免了错误


如果文件中的最后一行没有终止换行符,此解决方案可能会失败。如果这是一个问题,请参阅的可接受答案以获得修复。

将其分为两个步骤。您不需要循环:

grep "del" file | grep -v "ins"

将其分为两步。您不需要循环:

grep "del" file | grep -v "ins"
这里有一个sed解决方案。它否定后跟ins的匹配del,并打印其中包含del的所有内容-n以使每隔一次输出静音

$ sed -n -e '/del.*ins/!{/.*del.*/p}' inputFile
NM_003924.3:c.765_779delGGCAGCGGCGGCAGC
这里有一个sed解决方案。它否定后跟ins的匹配del,并打印其中包含del的所有内容-n以使每隔一次输出静音

$ sed -n -e '/del.*ins/!{/.*del.*/p}' inputFile
NM_003924.3:c.765_779delGGCAGCGGCGGCAGC

下面是使用启用PCRE的grep的另一个答案。这应该与GNU grep中的-P选项一起使用


下面是使用启用PCRE的grep的另一个答案。这应该与GNU grep中的-P选项一起使用


谢谢大家的帮助和解释:。谢谢大家的帮助和解释:。先使用ins的记录如何,如111_ins_222_del?先使用ins的记录如何,如111_ins_222_del
while read -r line; do
    [[ $line =~ del && ! $line =~ ins ]] && printf '%s\n' "$line"
done < file
grep "del" file | grep -v "ins"
$ sed -n -e '/del.*ins/!{/.*del.*/p}' inputFile
NM_003924.3:c.765_779delGGCAGCGGCGGCAGC
$ grep -P 'del\.*(?!.*ins)' inputFile
NM_003924.3:c.765_779delGGCAGCGGCGGCAGC