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

0

Estou escrevendo uma função em zsh que tem uma string

"find . -a -print:10"

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

também, a string pode ter o formato

find . -a -print

Nesse caso, se não houver nenhum padrão :[0-9]+ no final, a sequência deverá ser mantida inalterada.

então

  • find . -a -print:10 deve se tornar find . -a -print
    e
  • find . -a -print deve permanecer como find . -a -print

O que eu tentei até agora

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

Se eu tentar

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

mas a mesma expressão sed

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

Como posso aparar corretamente essa string?

    
por the_velour_fog 04.10.2016 / 03:21

1 resposta

3

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

Use apenas:

sed -E -e 's/:[0-9]+$//'
    
por 04.10.2016 / 03:29

Tags