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

Kay*_*han 17 regex bash sed

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

我想出的最好的是

echo ${String}| sed -e 's/["ABC"]*$//g'
Run Code Online (Sandbox Code Playgroud)

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

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

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

mab*_*ham 22

bash可以在内部完成.以下删除末尾的任何"ABC"字符串,其结果可用于变量赋值,命令或其他:

${String%ABC}
Run Code Online (Sandbox Code Playgroud)

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


Bir*_*rei 14

这应该工作:

echo "DAAAAABCBBBCCABCABC" | sed -e 's/\(ABC\)*$//g'
Run Code Online (Sandbox Code Playgroud)

结果:

DAAAAABCBBBCC
Run Code Online (Sandbox Code Playgroud)

括号内的环绕字符串,并*按照确切的顺序应用于其中的所有字母.


anu*_*ava 5

你应该使用:

sed -E 's/(ABC)+$//'
Run Code Online (Sandbox Code Playgroud)

要么:

sed -r 's/(ABC)+$//'
Run Code Online (Sandbox Code Playgroud)

两者都会给出输出:

DAAAAABCBBBCC
Run Code Online (Sandbox Code Playgroud)