2012-02-08 10 views

cevap

10

Bu çalışması gerekir:

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

Sonucu: Parantez ve * arasında

DAAAAABCBBBCC 

Surround dize tam olarak o sırayla içlerinde bütün harfleri için de geçerlidir.

4

Sen kullanmalıdır:

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

VEYA:

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

İkisi çıktı verecektir:

DAAAAABCBBBCC 
+0

değer görün genişletilmiş düzenli ifade. Mac (Darwin) ve '-r 'tarafından diğer Linux dağıtımları tarafından kullanılan' -E 'yi gördüm. – LopSae

+0

'-E', BSD sed ile uyumluluk için belgesiz bir seçenektir. Neredeyse kesinlikle -r kullanmalısınız. -E, sed'in busybox sürümünde başarısız olacak. – Six

16

bash içten yapabilirsiniz. şu sona herhangi bir "ABC" dizesini kaldırır ve onun sonucu değişken atama, bir komuta ya da her neyse kullanılan olabilir:

${String%ABC} 

her iki parametre bir şekilde Expresión yorumlama imkan söz http://tldp.org/LDP/abs/html/string-manipulation.html

+1

Bu yalnızca son 'ABC' oluşumunu kaldıracaktır. Bu tür Shell Parametre Genişlemesi glob kullanır, bu yüzden "herhangi bir sayıda ABC" yi ifade etmek mümkün değildir. Daha fazla bilgi için: http://www.gnu.org/software/bash/manual/bashref.html#Shell-Parameter-Expansion – LopSae

+0

İyi nokta! Genişletilmiş globs ('shopt -s extglob') ile – mabraham

+0

@ LopSae teşekkürler, işe yarar:' $ {String %% + (ABC)} ' –

İlgili konular