我试图捕获Option Compare Text
Private Sub TextBox1_Change()
Application.ScreenUpdating = False
Range("E8:E30").Interior.ColorIndex = 24
If TextBox1 <> "" Then
For ligne = 8 To 30
If Cells(ligne, 5) Like "*" & TextBox1 & "*" Then
Cells(ligne, 5).Interior.ColorIndex = 43
End If
Next
End If
End Sub
中仅有$line
的一行并将其读入file
(第2行是一个示例)。第3行中有del
,但也有del
和ins
,当前执行时会捕获两者。我不确定如何排除bash
以外的任何内容,而只捕获那些行。谢谢:)。
文件
del
所需的输出
NM_003924.3:c.765_779dupGGCAGCGGCGGCAGC
NM_003924.3:c.765_779delGGCAGCGGCGGCAGC
NM_003924.3:c.765_779delGGCAGCinsGGCGGCAGC
NM_003924.3:c.765_779insGGCAGCGGCGGCAGC
带有当前输出的重击
NM_003924.3:c.765_779delGGCAGCGGCGGCAGC
答案 0 :(得分:2)
请尝试以下操作(如果可以使用awk
,则可以)。
awk '/del/ && !/ins/' Input_file
答案 1 :(得分:1)
尝试:
while read -r line; do
[[ $line =~ del && ! $line =~ ins ]] && printf '%s\n' "$line"
done < file
修改后的代码也是ShellCheck干净的,避免使用BashPitfall #14。
如果文件的最后一行没有终止换行符,则此解决方案可能会失败。如果这是一个问题,请参见Read last line of file in bash script when reading file line by line的可接受答案以获取修复。
答案 2 :(得分:1)
分为2个步骤。您不需要循环:
grep "del" file | grep -v "ins"
答案 3 :(得分:1)
这是一个sed
解决方案。它会否定匹配项del
后跟ins
,并打印其中包含del
的所有内容。 -n
使所有其他输出静音。
$ sed -n -e '/del.*ins/!{/.*del.*/p}' inputFile
NM_003924.3:c.765_779delGGCAGCGGCGGCAGC
答案 4 :(得分:1)
这是使用启用了PCRE的grep
的另一个答案。这应该与-P
GNU grep
选项一起使用
$ grep -P 'del\.*(?!.*ins)' inputFile
NM_003924.3:c.765_779delGGCAGCGGCGGCAGC