¿Cómo puedo recortar correctamente una cadena con sed y no matar la cadena si el patrón no está ahí?

¿Cómo puedo recortar correctamente una cadena con sed y no matar la cadena si el patrón no está ahí?

Estoy escribiendo una función en zshla que tiene una cadena.

"find . -a -print:10"

la :10pieza debe recortarse por la derecha. Esto podría cambiar en el futuro para convertirse en :23o :77etc., por lo que parece que :[0-9]+se necesita un patrón.

Además, la cadena podría tener la forma

find . -a -print

En cuyo caso, si no hay ningún :[0-9]+patrón al final, entonces la cuerda no debe modificarse.

entonces

  • find . -a -print:10debería convertirse find . -a -print
    y
  • find . -a -printdebe permanecer comofind . -a -print

Lo que he probado hasta ahora

% sed -nr 's/(.*)(:[0-9]+)?/\1/p' <<<'find . -a -print:10'
find . -a -print:10     # ':10' not getting trimmed

si lo intento

sed -nr 's/(.*)(:[0-9]+)/\1/p' <<<'find . -a -print:10'
find . -a -print  # ':10' getting trimmed GOOD ✔✔ 

pero la misma sedexpresión

 sed -nr 's/(.*)(:[0-9]+)/\1/p' <<<'find . -a -print'
 # no output

¿Cómo puedo recortar correctamente esta cuerda?

Respuesta1

¿Por qué lo utiliza -nsi no desea suprimir la salida predeterminada?

Solo usa:

sed -E -e 's/:[0-9]+$//'

información relacionada