2012-02-08 11 views
15

文字列の最後にABCを削除したいと思います。sedやその他のbashツールを使用して文字列の最後にパターンを削除する

私が思いついた中で最高の

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

あるしかし、それは文字列の最後に、すべてのA、またはBまたはCを削除します。

文字列DAAAAABCBBBCCABCABCであれば、私は上記の式を使用している場合、それは代わりに「DAAAAABCBBBCC」の、

を「D」を返しますこれを行うのいずれかのより良い方法はありますか?ありがとう。

答えて

10

これは動作するはずです:

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

結果:括弧と*

DAAAAABCBBBCC 

サラウンド文字列は、その正確な順序でそれら内のすべての文字に適用します。

あなたが使用する必要があります
4

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

OR:

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

はどちらも出力が得られます:

DAAAAABCBBBCC 
+0

価値を参照してください。拡張正規表現。私は '-E'がMac(Darwin)で、' -r'が他のLinuxディストリビューションで使用されているのを見てきました。 – LopSae

+0

'-E'はBSD sedとの互換性のための文書化されていないオプションです。ほぼ確実に '-r'を使うべきです。 '-E'はsedのビジーボックス版では失敗します。 – Six

16

bashは内部的にこれを行うことができます。以下は、終了時にすべての「ABC」の文字列を削除し、その結果は変数の割り当て、コマンドまたは何に使用することができます。

${String%ABC} 

は、両方のパラメータとしてexpresionを解釈有効にすることを言及するhttp://tldp.org/LDP/abs/html/string-manipulation.html

+1

これは 'ABC'の最後のオカレンスだけを削除します。このようなShell Parameter Expansionではglobを使用しているため、「任意の数のABC」を表現することはできません。詳細情報:http://www.gnu.org/software/bash/manual/bashref.html#Shell-パラメータ - 拡張 – LopSae

+0

良い点!ありがとう – mabraham

+0

@LopSae拡張グロブ( 'shopt -s extglob')を使うと、' $ {String %% +(ABC)} ' –

関連する問題