使用sed或其他bash工具删除字符串末尾的模式

时间:2012-02-08 09:57:30

标签: regex bash sed

我想删除字符串末尾的任何ABC。

我想出的最好的是

echo ${String}| sed -e 's/["ABC"]*$//g'

但是,它会删除字符串末尾的所有A,B或C.

如果String是DAAAAABCBBBCCABCABC,如果我使用上面的表达式,它将返回“D”,而不是“DAAAAABCBBBCC”

有没有更好的方法呢?谢谢。

3 个答案:

答案 0 :(得分:19)

bash可以在内部执行此操作。以下删除末尾的任何“ABC”字符串,其结果可用于变量赋值,命令或其他:

${String%ABC}

请参阅http://tldp.org/LDP/abs/html/string-manipulation.html

答案 1 :(得分:13)

这应该有效:

echo "DAAAAABCBBBCCABCABC" | sed -e 's/\(ABC\)*$//g'

结果:

DAAAAABCBBBCC

括号和*之间的环绕字符串以适当的顺序应用于其中的所有字母。

答案 2 :(得分:5)

您应该使用:

sed -E 's/(ABC)+$//'

OR:

sed -r 's/(ABC)+$//'

两者都会给出输出:

DAAAAABCBBBCC