web-dev-qa-db-ja.com

sedまたは他のbashツールを使用して文字列の末尾のパターンを削除する

文字列の最後にあるABCを削除したいと思います。

私が思いついた最高のものは

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

ただし、文字列の末尾にあるすべてのA、またはBまたはCが削除されます。

StringがDAAAAABCBBBCCABCABCの場合、上記の式を使用すると、「DAAAAABCBBBCC」ではなく「D」が返されます。

これを行うより良い方法はありますか?ありがとう。

18
Kay Chan

これはうまくいくはずです:

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

結果:

DAAAAABCBBBCC

括弧と*の間の囲み文字列は、その中のすべての文字に正確な順序で適用されます。

14
Birei

bashはこれを内部で実行できます。次のコードは、末尾の「ABC」文字列をすべて削除し、その結果を変数の割り当て、コマンドなどで使用できます。

${String%ABC}

http://tldp.org/LDP/abs/html/string-manipulation.html を参照してください

20
mabraham

あなたは使うべきです:

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

または:

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

どちらも出力を提供します:

DAAAAABCBBBCC
5
anubhava