捕获特定模式的bash并排除其他模式。
捕获特定模式的bash并排除其他模式。
我正在尝试捕获并读取$line
中只包含del
的行(第2行是一个示例)。第3行包含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
当前的bash输出
while read line; do if [[ $line =~ del ]] ; then echo $line; fi done < file NM_003924.3:c.765_779delGGCAGCGGCGGCAGC NM_003924.3:c.765_779delGGCAGCinsGGCGGCAGC
问题的出现原因是想要在bash脚本中捕获特定模式的实例,同时排除其他模式的实例。上述代码是一种解决方法,它使用了正则表达式来匹配行中的模式,并通过逻辑判断来排除不符合条件的行。
该代码通过读取文件的每一行,并使用循环来逐行处理。在每一行中,代码使用正则表达式来判断是否包含特定模式,并且不包含其他模式。如果满足条件,则打印该行。
代码还经过了修正,使用了ShellCheck工具来避免常见的错误。此外,代码还避免了Bash陷阱#14,即使用echo输出变量时可能会导致意外的结果。
然而,这种解决方法可能在文件的最后一行没有换行符的情况下失败。如果这是一个问题,请参考在逐行读取文件时如何读取文件的最后一行的问题的接受答案中的解决方法。
上述代码提供了一种使用bash脚本捕获特定模式并排除其他模式的解决方法。它通过正则表达式匹配行中的模式,并通过逻辑判断来排除不符合条件的行。然而,需要注意文件最后一行没有换行符的情况。
问题的原因是需要从一个输入文件中捕获特定模式的实例,并排除其他模式。解决方法是使用sed命令,并使用正则表达式来匹配和排除特定模式。
在这个例子中,sed命令使用了多个选项和参数:
- -n选项表示静默模式,即只输出匹配到的行。
- -e选项后面跟着的是sed的编辑命令。
- /del.*ins/是一个正则表达式,表示匹配以"del"开头,后跟任意字符,然后再跟"ins"的行。
- !表示对前面的匹配结果进行取反操作。
- {/.*del.*/p}表示匹配包含"del"的行,并将其打印出来。
最终输出的结果是包含"del"的行:
NM_003924.3:c.765_779delGGCAGCGGCGGCAGC
通过使用sed命令并结合正则表达式,我们可以灵活地捕获特定模式的实例,并排除其他模式。感谢大家的帮助和解释。