我试图用任何内容(基本上删除)替换序列末尾的三个字母代码,sed但对于多个正则表达式模式效果不佳。这是序列的示例
GCAAAAAGTTGTATAGTCACACAACCTAGACTTATATCGTCTGCTATTCATTAG
GCAAAAAGTTGTATAGTCACACAACCTAGACTTATATCGTCTGCTATTCATTAA
GCAAAAAGTTGTATAGTCACACAACCTAGACTTATATCGTCTGCTATTCATTGA
Run Code Online (Sandbox Code Playgroud)
当我尝试regex单独使用时sed它有效
echo "GCAAAAAGTTGTATAGTCACACAACCTAGACTTATATCGTCTGCTATTCATTAG" | sed 's/TAG$//'
echo "GCAAAAAGTTGTATAGTCACACAACCTAGACTTATATCGTCTGCTATTCATTAA" | sed 's/TAA$//'
echo "GCAAAAAGTTGTATAGTCACACAACCTAGACTTATATCGTCTGCTATTCATTAG" | sed 's/TAG$//'
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试包含多个正则表达式时,它不起作用
echo "GCAAAAAGTTGTATAGTCACACAACCTAGACTTATATCGTCTGCTATTCATTAG" |
sed 's/(TAG$|TAA$|TGA$)//'
Run Code Online (Sandbox Code Playgroud)
有人可以指出我哪里做错了吗?
您需要在 sed 中使用扩展正则表达式开关:
sed -r 's/(TAG|TAA|TGA)$//'
Run Code Online (Sandbox Code Playgroud)
或者在 OSX 上:
sed -E 's/(TAG|TAA|TGA)$//'
Run Code Online (Sandbox Code Playgroud)
或者这个不带扩展正则表达式的 sed (不过在 OSX 上不起作用):
sed 's/\(TAG\|TAA\|TGA\)$//'
Run Code Online (Sandbox Code Playgroud)