sed 与正则表达式

upe*_*dra 4 regex sed

我试图用任何内容(基本上删除)替换序列末尾的三个字母代码,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)

有人可以指出我哪里做错了吗?

anu*_*ava 5

您需要在 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)