Como posso cortar uma string com sed - e não matar a string se o padrão não estiver lá?

Como posso cortar uma string com sed - e não matar a string se o padrão não estiver lá?

Estou escrevendo uma função na zshqual possui uma string

"find . -a -print:10"

a :10parte precisa ser aparada à direita. Isso pode mudar no futuro para se tornar :23ou :77etc, então parece que um padrão como esse :[0-9]+é necessário.

além disso, a string pode ter o formato

find . -a -print

Nesse caso, se não houver nenhum :[0-9]+padrão no final, a string deverá permanecer inalterada.

então

  • find . -a -print:10deveria se tornar find . -a -print
    e
  • find . -a -printdeveria ficar comofind . -a -print

O que eu tentei até agora

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

Se eu tentar

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

mas a mesma sedexpressão

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

Como posso cortar essa string corretamente?

Responder1

Por que você está usando -nse não deseja suprimir a saída padrão?

Apenas use:

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

informação relacionada