bash捕获模式的特定实例并排除其他实例
我试图捕获并读入$line文件中只有del的一行或几行,第2行就是一个例子。第3行中有del,但它也有ins,而bash在执行时当前捕获了这两者。我不知道如何排除除del之外的任何内容,而只捕获这些行。谢谢 文件 期望输出 带电流输出的bashbash捕获模式的特定实例并排除其他实例,bash,awk,sed,grep,Bash,Awk,Sed,Grep,我试图捕获并读入$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