2012-02-08 11 views

Respuesta

10

Esto debería funcionar:

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

Resultado:

DAAAAABCBBBCC 

cadena de sonido envolvente entre paréntesis y * se aplica a todas las cartas en su interior en ese orden exacto.

4

Deberá utilizar:

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

O:

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

Tanto dará salida:

DAAAAABCBBBCC 
+0

Vale la pena mencionar que ambos parámetros permiten interpretar el la expresion como una expresión regular extendida. He visto ''E' utilizado por Mac (Darwin) y' -r' por otras distribuciones de Linux. – LopSae

+0

'-E' es una opción no documentada para compatibilidad con BSD sed. Es casi seguro que estés usando '-r'. '-E' fallará en la versión de busybox de sed. – Six

16

fiesta puede hacer esto internamente. A continuación se elimina la cadena "ABC" al final, y su resultado se utiliza en la asignación de variables, un comando o lo que sea:

${String%ABC} 

Ver http://tldp.org/LDP/abs/html/string-manipulation.html

+1

Esto solo eliminará la última aparición de 'ABC'. Este tipo de expansión de parámetros de Shell utiliza glob, por lo que no es posible expresar "ningún número de ABC" con él. Más información: http://www.gnu.org/software/bash/manual/bashref.html#Shell-Parameter-Expansion – LopSae

+0

¡Buen punto! Gracias – mabraham

+0

@LopSae con globos extendidos ('shopt -s extglob'), funcionaría:' $ {String %% + (ABC)} ' –

Cuestiones relacionadas