regex - sed 与正则表达式

标签 regex sed

我试图用 sed 替换序列末尾的三字母代码(基本上删除),但对于多个正则表达式模式效果不佳。这是序列的示例

GCAAAAAGTTGTATAGTCACACAACCTAGACTTATATCGTCTGCTATTCATTAG
GCAAAAAGTTGTATAGTCACACAACCTAGACTTATATCGTCTGCTATTCATTAA
GCAAAAAGTTGTATAGTCACACAACCTAGACTTATATCGTCTGCTATTCATTGA

当我尝试将 regexsed 单独使用时,它可以工作

echo "GCAAAAAGTTGTATAGTCACACAACCTAGACTTATATCGTCTGCTATTCATTAG" | sed 's/TAG$//'
echo "GCAAAAAGTTGTATAGTCACACAACCTAGACTTATATCGTCTGCTATTCATTAA" | sed 's/TAA$//'
echo "GCAAAAAGTTGTATAGTCACACAACCTAGACTTATATCGTCTGCTATTCATTAG" | sed 's/TAG$//'

但是,当我尝试包含多个正则表达式时,它不起作用

echo "GCAAAAAGTTGTATAGTCACACAACCTAGACTTATATCGTCTGCTATTCATTAG" |
sed 's/(TAG$|TAA$|TGA$)//'

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

最佳答案

您需要在 sed 中使用扩展正则表达式开关:

sed -r 's/(TAG|TAA|TGA)$//'

或者在 OSX 上:

sed -E 's/(TAG|TAA|TGA)$//'

或者这个不带扩展正则表达式的 sed(不过在 OSX 上不起作用):

sed 's/\(TAG\|TAA\|TGA\)$//'

关于regex - sed 与正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23551008/

相关文章:

regex - Google Analytics(分析)过滤器RegEXp帮助

javascript - 如何从 "^pearl(pig|hog)+$"获取匹配的输出?

php - 如果字符串不是链接,则正则表达式替换字符串中的单词

regex - shell 正则表达式 : Extract prices

shell - "inplace"shell命令的包装器

linux - SED - 删除后跟换行 (\n) 的字符串

javascript - JavaScript 中的正则表达式 (^|\\?|&)

javascript - 如何在 JavaScript 中用 "/"替换字符串中的每个点

linux - 在 "while read"表达式中使用 sed

bash - UNIX:使用 egrep 或 sed 查找字符串第一次出现的行?